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

Мне нужно предупредить пользователя, открыв всплывающее окно, когда идет дождь, и получить от него обратную связь, нажав кнопку, чтобы убедиться, что он знает состояние погоды. Но я хочу, чтобы другие строки моего кода работали в фоновом режиме. Другими словами, я ищу решение, которое не вызывает остановку программы, пока пользователи не нажмут кнопку. Я использую Visual Studio 2013 WinForms. Спасибо всем.


person GntS    schedule 14.01.2015    source источник
comment
WinForms? ВПФ? АСП.НЕТ?   -  person dymanoid    schedule 14.01.2015
comment
Уважаемый dymanoid, Visual Studio 2013 WinForms   -  person GntS    schedule 14.01.2015
comment
Вы можете показать свое всплывающее окно, вызвав YourWindow.Show(), а не YourWindow.ShowDialog(). Это отобразит ваше окно как немодальное, и ваш код продолжит выполнение.   -  person dymanoid    schedule 14.01.2015
comment
Уважаемый dymanoid, в вашем решении можно получить результат нажатия кнопки как MessageBox?   -  person GntS    schedule 14.01.2015
comment
Я не уверен, о чем вы спрашиваете, но если вы имеете в виду, можете ли вы получить значение System.Windows.Forms.DialogResult по нажатию кнопки, то - да. Это не проблема. Но вы должны закрыть свое окно явным образом, так как установка DialogResult этого не сделает, потому что ваше окно не модальное.   -  person dymanoid    schedule 14.01.2015


Ответы (1)


Однако я не уверен, каковы ваши точные требования

Messagebox.show показывает messagebkx, который известен как «модальный», что означает, что вы не можете взаимодействовать с другими окнами, пока оно открыто. Чтобы иметь немодальное окно сообщения, попробуйте создать новую форму и использовать messagebox.show для ее отображения. Вам нужно будет создать форму и использовать Show() для отображения.

Обратите внимание, что с messagebox.show вы получаете результат, как только messagebox закрывается, немодальное окно сообщения этого не делает, и вам нужно будет что-то закодировать, чтобы обработать это, например, событие.

Если это не событие, возможно, вы ищете async await.

Async и await — два ключевых слова C#, дополнительную информацию можно найти в документации Microsoft здесь: http://msdn.microsoft.com/en-us/library/hh191443.aspx

Если вы создадите метод async с именем showDialogAsync(), который ожидает результата пользователя, а затем ожидает его в новом потоке, вы получите следующий результат:

Ваша программа работает в обычном режиме. Соблюдены условия, и диалоговое окно должно быть показано. showDialogAsync вызывается и ожидается. Showdialogasync ожидает ввода пользователей. Управление возвращается методу, вызвавшему showDialogAsync. Когда пользователь нажимает кнопку, запускается код после ожидания вызывающего метода.

На этой диаграмме показан поток управления в некотором async коде, который может быть полезен: http://i.msdn.microsoft.com/dynimg/IC612215.png

person Cody Love    schedule 14.01.2015
comment
Вопрос, насколько я понимаю, как показать немодальное всплывающее окно. Это не имеет ничего общего с async/await или многопоточностью. - person dymanoid; 14.01.2015