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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SoundPlayer - как проигрывать из ресурсов 
:(
    Опции темы
transkriptsiya
Дата 26.1.2015, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



У меня в ресурсах лежит 100 .wav файлов (имена 1 2 3 .... 100) длинной 1-2 секунды. Мне нужно их проиграть все по очереди.
Код


 private void button_play_Click(object sender, EventArgs e)
        {
            int i = 0;

            do{
                string aa = "_" + i;
                SoundPlayer sps = new SoundPlayer(Properties.Resources.ResourceManager.GetStream(aa.ToString()));
                sps.PlaySync();
             
                
                i++;
            }
            while(i<102);
        }


Все проигрывает как нужно, только при этом окно зависает до окончания цикла. Как быть?
PM MAIL   Вверх
Rockie
Дата 26.1.2015, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

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



Полагаю надо смотреть в сторону многопоточности


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
transkriptsiya
Дата 28.1.2015, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ок
Код


 public void button_play_Click(object sender, EventArgs e)
        {
            button_play.Enabled = false;  //!!!
            Thread thread = new Thread(metod);
            thread.Start();
            thread.IsBackground = true;
            
        }

         void metod()
        {
            int i = 0;
            do
            {

                string aa = "_" + i;
                SoundPlayer sps = new SoundPlayer(Properties.Resources.ResourceManager.GetStream(aa.ToString()));
                sps.PlaySync();

                i++;
            }
            while (i < 10);
         button_play.Enabled = true;  //!!! говорит что нельзя из вторичного потока рулить первичным
         
        }

После запуска потока отключаю кнопку и не знаю как включить обратно из вторичного потока после его завершения.
Подскажите как включить кнопку обратно

Это сообщение отредактировал(а) transkriptsiya - 28.1.2015, 14:59
PM MAIL   Вверх
Ilya81
Дата 28.1.2015, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 18.4.2014
Где: ЛО, Всеволожский р-н

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



Цитата(transkriptsiya @  28.1.2015,  14:58 Найти цитируемый пост)
После запуска потока отключаю кнопку и не знаю как включить обратно из вторичного потока после его завершения.
Подскажите как включить кнопку обратно

Использовать метод Invoke у класса Form.

PM MAIL ICQ Skype   Вверх
infarch
Дата 30.1.2015, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Если использовать дотнет 4.5 то задача весьма тривиальная: 

Код

        private async void button2_Click(object sender, EventArgs e)
        {
            Button b = sender as Button;
            b.Enabled = false;

            for (int i = 0; i < 30; i++)
            {
                await PlayAsync(i);
            }
            b.Enabled = true;
        }

        private Task PlayAsync(int trackNumber)
        {
            return Task.Factory.StartNew(() =>
            {
                Play(trackNumber);
            });
        }

        private void Play(int trackNumber)
        {
            Console.WriteLine("Playing track {0}", trackNumber);
            Thread.Sleep(1000);
        }



Если фреймворк более ранний, читайте про Invoke, как тут советовали.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

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


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

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


 




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


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

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