Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> класс player. невоиспроизводится музыка, при пуске таймера звук невоспроизводится 
:(
    Опции темы
CORPORAL
Дата 22.6.2011, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 3.1.2010

Репутация: нет
Всего: нет



Здравствуйте, такой вопрос: есть класс плеер, в нем музыка воспроизводиться по средствам 
Код

       [DllImport("winmm.dll")]
        private static extern long mciSendString(string Cmd, StringBuilder StrReturn, int ReturnLength, IntPtr HwndCallback);
...
 //
        //Воспроизведение файла
        //
        public bool PlayFile(string FileName)
        {
            if (open)
            {
                this.Close();
            }
            this.Open(FileName);
            return this.Play();
        }
...
 //
        //Открыть файл
        //
        public void Open(string FileName)
        {
            mciSendString("open \"" + FileName + "\" type mpegvideo alias MediaFile", null, 0, IntPtr.Zero);
            open = true;
        }

     
  
сделал свой плеер и при нажатии на кнопочку плей обращаюсь к классу player метод  PlayFile(string FileName); 
тут все в порядку, а вот когда я запускаю таймер
Код

System.Threading.Timer TimerAction;

...
//нажатие кнопки активации
void button_click(object sender, EventArgs e)
{
 TimerAction = new System.Threading.Timer(TimerAction_Tick, null, 0, 1000);
}

//и сам тик таймера
 private void TimerAction_Tick(object sender)
        {
 if (smk1)//вот когда булевская smk1=true
                {

                    if (!MP.IsPlay)//проверяем играла до этого музыка
                    {

                        MP.PlayFile(signal1);//вызывается метод, но звука нет. почему?

                        MP.PlayLoop();
                    }
                }
}


собственно файл (путь который signal1) не воспроизводиться и нет ексепшна. Помогите плиз
PM MAIL   Вверх
-Mikle-
Дата 23.6.2011, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 8
Всего: 59



С этой АПИ не работал, но полагаю, что это связано с вызовом из не основного потока. К чему такая навороченная схема запуска на воспроизведение?


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
CORPORAL
Дата 23.6.2011, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 3.1.2010

Репутация: нет
Всего: нет



Вы совершенно правы 
Цитата

что это связано с вызовом из не основного потока. 

если бы, например, записать в текст бокс то я  использовал делегаты, а тут... как решить эту траблу?
Навороченность в том, что я делаю типа сигнализации. Тоесть если сработал датчик то должен быть звук. В таймере идет проверка датчиков ( bool smk1 - датчик открытый или закрытый).
PM MAIL   Вверх
-Mikle-
Дата 24.6.2011, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 8
Всего: 59



Используйте тогда оконный таймер System.Windows.Forms.Timer вместо System.Threading.Timer


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
CORPORAL
Дата 24.6.2011, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 3.1.2010

Репутация: нет
Всего: нет



До этого я использовал System.Windows.Forms.Timer  и все было нормально, но потом мне понадобилось управлять этим таймером по сети (клиент-серверное приложение). А по сети нельзя запустить "простой" таймер, вот и переделал на System.Threading.Timer. Какие еще варианты?
PM MAIL   Вверх
-Mikle-
Дата 27.6.2011, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 8
Всего: 59



Цитата(CORPORAL @  24.6.2011,  20:56 Найти цитируемый пост)
А по сети нельзя запустить "простой" таймер

Как это понять? Имеется ввиду все тот же крос-трединг что-ли? Если да, то решается также как и с контролами. А вообще, есть чувство, что что-то не так с подходом к задаче.


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
CORPORAL
Дата 28.6.2011, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 3.1.2010

Репутация: нет
Всего: нет



Цитата

Имеется ввиду все тот же крос-трединг что-ли?

простите, а что это крос-трединг?
Цитата

Если да, то решается также как и с контролами

и можно пример?
PM MAIL   Вверх
-Mikle-
Дата 29.6.2011, 07:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 8
Всего: 59



Лучше пойдем с другой стороны.
Цитата(CORPORAL @  24.6.2011,  20:56 Найти цитируемый пост)
А по сети нельзя запустить "простой" таймер

Почему нельзя?


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
CORPORAL
Дата 29.6.2011, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 3.1.2010

Репутация: нет
Всего: нет



Таймер из Forms не работает между потоками.  
Вот нашел решение как запустить этот таймер
Код

 #region запускем/останавливаем таймер
        private void ActionAlarm(bool Enable)
        {
            if (InvokeRequired)
                this.BeginInvoke(new Action<bool>((s) => { EnableAlarm(s); }), Enabled);
            else EnableAlarm(Enable);
        }
        #endregion


        #region
        private void EnableAlarm(bool Enable)
        {
            timer_Action.Enabled = Enable;
        }
        #endregion

звук включается, но теперь не могу выключить, то есть в таймере звук включился
Код

if (smk1)//вот когда булевская smk1=true
                {
                    if (!MP.IsPlay)//проверяем играла до этого музыка
                    {
                        MP.PlayFile(signal1);//вызывается метод, но звука нет. почему?
                        MP.PlayLoop();
                    }
                }
 
 но потом вызываю  MP.Stop(); - остановить воспроизвидение сигнала и ничего :(
PM MAIL   Вверх
-Mikle-
Дата 3.7.2011, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 8
Всего: 59



Цитата(CORPORAL @  29.6.2011,  16:54 Найти цитируемый пост)
MP.Stop

Тоже надо вызывать в основном потоке.


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
CORPORAL
Дата 9.7.2011, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 3.1.2010

Репутация: нет
Всего: нет



-Mikle-,  спасибо за помощь. Я  разобрался  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0466 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.