Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2013, 18:35   #1
lastkill
Новичок
Джуниор
 
Регистрация: 14.05.2013
Сообщений: 1
По умолчанию WIndows forms проблемы со звуком

и так,мне нужно было чтобы в форме при нажатии на кнопку ЗАЦИКЛЕННО проигрывался звук,однако при этом проигрывани у меня зависает меню, если же я пытаюсь совершить его в отдельном потоке,то выскакивает исключение:
Вызывающий поток не может получить доступ к данному объекту, так как владельцем этого объекта является другой поток.
что сделать для того чтобы звук сам воспроизводился и не мешал форме работать?

вот код обработчика клика:
Код:
 Metro.SetBmpValue = bmpValue.Text;
            Metro.SetNumberOfDownbeatValue = numberOfDownBeat.Text;
            Metro.GenerateSpeedratios();
            _thr = new Thread(Metro.StartMetronome);
            _thr.Start();
первые 3 строки нужны для считывания инфы с формы и генерации ускорения,а вот метод Metro.StartMetronome запускает воспроизведение
нужные методы:
Код:
 
//зацикленно включить метроном
        public void StartMetronome()
        {
            for (; ; )
            {
                for (int i = 1; i < _numberOfDownbeat; i++)
                {
                    PlayFirstSound();
                }
                PlaySecondSound();
            }
        }
     //проиграть первый щелчок
        public void PlayFirstSound()
        {
            Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Normal, new PlayDelegate(_firstsound,Play));
          Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Normal, new PlayDelegate(this.FirstSoundSleep));
          Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Normal, new PlayDelegate(_firstSound.Stop));                                              
        }
        //проиграть второй щелчок
        public void PlaySecondSound()
        {
            Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Normal, new PlayDelegate(_secondSound.Play));
            Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Normal, new PlayDelegate(this.SecondSoundSleep));
            Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Normal, new PlayDelegate(_secondSound.Stop));          
        }
        public void FirstSoundSleep()
        {
            Thread.Sleep((int)(_firstSound.NaturalDuration.TimeSpan.TotalMilliseconds / _speedRatio1));
        }
        public void SecondSoundSleep()
        {
            Thread.Sleep((int)(_secondSound.NaturalDuration.TimeSpan.TotalMilliseconds / _speedRatio1));
        }
lastkill вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемы со звуком Ned23 Компьютерное железо 12 17.02.2015 12:50
проблемы со звуком Sotnik89 Свободное общение 1 16.08.2012 23:22
проблемы со звуком ... Марсель21 Компьютерное железо 7 30.07.2012 12:12
Проблемы со звуком Last Операционные системы общие вопросы 13 20.10.2009 14:15