Всё таки остановился на варианте без блокировки при показе диалогового окна. Диалогов будет много, один диалог может открывать другие диалоги, а те в свою очередь свои. Получается где-то так:
Код | /// <summary> /// Интерфейс экрана /// </summary> public interface IScreen{
/// <summary> /// Заголовок /// </summary> string Title{set;}
/// <summary> /// Фалг видимости /// </summary> bool IsVisible{set;}
/// <summary> /// Событие закрытия экрана /// </summary> event EventHandler Close; }
|
Код | /// <summary> /// Экран главной формы /// </summary> public interface IMainScreen:IScreen{ }
|
Код | /// <summary> /// Вид экрана с вопросом к пользователю /// </summary> public interface IQuestionScreen:IScreen{
/// <summary> /// Вопрос к пользователю /// </summary> string Question{set;}
/// <summary> /// Выбор пользователя /// </summary> DialogResult Result{get;} }
|
Код | /// <summary> /// Предоставляет доступ к экранам /// </summary> public interface IMultiScreen{
IMainScreen MainScreen{get;}
IQuestionScreen QuestionScreen{get;} }
|
То есть установка свойства экрана IsVisible=true не будет приводить к блокировке потока до закрытия экрана. Presenter сам будет устанавливать видимость экранов, реагируя на события. |