#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 не будет работать. Но потоковая передача — хороший вариант. Спасибо, ребята 🙂