Воспроизводить звук до диалогового окна.dialogresult == dialogresult.OK

#c# #winforms #dialog #messagebox

#c# #winforms #диалоговое #окно сообщений

Вопрос:

Я разрабатываю приложение winform. Я хочу воспроизводить звуковой файл, пока dialogresult не будет одобрен для окна сообщения. Как я могу этого добиться.

Например,

  /*Till*/ (MessageBox.Show("Alarm") == DialogResult.OK)

 //Play a sound file
  

Я пробовал while и do while, но безуспешно. Нужно ли мне использовать фоновый рабочий процесс или запускать код в отдельном потоке??

Комментарии:

1. Почему do while не удалось? Что произошло вместо этого?

2. @Code Gray: Да, верно, но это требование клиента. Он хочет заставить себя закрыть диалоговое окно сразу же, как оно появляется. Итак, он хочет непрерывный сигнал тревоги .. !! Я знаю, что это действительно раздражает 🙂

3. Я полагаю, что появилось много окон сообщений

4. @Niraj: Да, я удалил этот комментарий после того, как прочитал ваш весь вопрос и понял, что вы создаете тревогу. Раздражающий сигнал тревоги — это нормально. 😉

5. Это потому, что команда отображения окна сообщения является синхронной. Процесс ожидает завершения, когда вы нажмете на OK.

Ответ №1:

Вам не нужно запускать собственную потоковую обработку. Библиотека классов .NET уже сделала это за вас. Вот как вы можете это сделать:

         SoundPlayer p = new SoundPlayer(@"C:WindowsMediachimes.wav");
        p.PlayLooping();
        MessageBox.Show("Alarm");
        p.Stop();
  

Ответ №2:

Да, запустите звуковой файл в отдельном потоке, который вы запускаете при появлении окна сообщения. Как только в окне сообщения появится сообщение OK, вы можете выполнить вызов в этот поток с указанием остановить музыку, или вы можете прервать поток.

Редактировать

Альтернативой было бы написать свой собственный AlarmMessageBox, который наследуется от MessageBox. Его единственное отличие будет заключаться в том, что при создании он начнет воспроизводить этот звук, а при нажатии ok остановится. Это может сработать только в одном потоке.

Комментарии:

1. @Chirstian: Хорошая идея создать окно оповещения. Попробую сейчас. !

2. MessageBox не имеет конструкторов, к которым вы можете получить доступ, по сути, он действует как статический класс, так что это не вариант.

3. Если вы можете начать воспроизведение звука при создании и остановить его при нажатии кнопки ok, то для этого вам не нужен отдельный класс. это похоже на sound.start();окно сообщений. Показать («Тревога»);sound.stop(). В чем преимущество подкласса?

4. @Лассе В. Карлсен — Это хороший момент. Можно было бы создать пользовательский MessageBox без наследования от MessageBox. Но это потребовало бы некоторой работы. Поэтому я бы предложил просто использовать два потока.

5. @Лассе: Да, alarmMessageBox не будет работать. Но потоковая передача — хороший вариант. Спасибо, ребята 🙂