Я спрашивал об особенностях этого подхода ранее сегодня здесь , но запутанные ответы заставляют меня задуматься, правильно ли я все это делаю.
Так вот в чем проблема. Мне нужно спроектировать приложение WinForms, которое периодически проверяет значение какого-либо внешнего сервиса. Если оно находится в определенном состоянии, предполагается, что приложение вызывает модальную форму, блокирующую взаимодействие пользователя с приложением до тех пор, пока состояние не изменится. Заблокированный пользовательский интерфейс должен действовать так же, как при отображении формы с помощью ShowDialog (). То есть пользователь не должен каким-либо образом взаимодействовать с пользовательским интерфейсом, пока диалоговое окно не будет закрыто (в этом случае это может сделать только приложение).
В моем конкретном приложении у меня есть требование в нескольких случаях. Например, в какой-то момент приложение запускает таймер, который многократно проверяет значение ячейки в таблице базы данных, которая постоянно обновляется взвешивающим устройством. Если значение ниже определенного порогового значения, пользователю предлагается разместить элементы на шкале - он или она не может продолжать или взаимодействовать с пользовательским интерфейсом, пока они не сделают это.
Каждое решение, которое я пробовал, было полно проблем с потоками. Либо диалоговое окно не заблокирует пользовательский интерфейс, либо таймер не продолжит проверку внешней службы, либо приложение не сможет закрыть форму, когда придет время.
Это похоже на довольно стандартное требование winforms, и должен существовать соответствующий шаблон проектирования, который не вносит в Windows.Forms.Timer (мне нравится держать его мои представления пассивными ). Как бы вы это сделали?