Мне нужно предупредить пользователя, открыв всплывающее окно, когда идет дождь, и получить от него обратную связь, нажав кнопку, чтобы убедиться, что он знает состояние погоды. Но я хочу, чтобы другие строки моего кода работали в фоновом режиме. Другими словами, я ищу решение, которое не вызывает остановку программы, пока пользователи не нажмут кнопку. Я использую Visual Studio 2013 WinForms. Спасибо всем.
Как я могу открыть всплывающее окно, чтобы предупредить пользователя и работать в фоновом режиме?
Ответы (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
YourWindow.Show()
, а неYourWindow.ShowDialog()
. Это отобразит ваше окно как немодальное, и ваш код продолжит выполнение. - person dymanoid   schedule 14.01.2015System.Windows.Forms.DialogResult
по нажатию кнопки, то - да. Это не проблема. Но вы должны закрыть свое окно явным образом, так как установкаDialogResult
этого не сделает, потому что ваше окно не модальное. - person dymanoid   schedule 14.01.2015