У меня есть приложение, подобное MVP, все дорогостоящие операции используют асинхронные вызовы и отображают GIF-подобный Ajax, который указывает пользователю, что что-то происходит, не блокируя основной поток.
Пример: форма ввода данных, пользовательнажимает кнопку Сохранить, выполняется асинхронная операция, и после ее завершения восстанавливает экран до редактируемой формы без блокировки потока пользовательского интерфейса (другими словами, не блокируя другие видимые окна в приложении).
Здесь все работает нормально, но с учетом следующего сценария:
Пользователь пытается закрыть форму и получает подтверждающее сообщение, которое спрашивает пользователя, уверен ли он, что он собирается закрыть, если он предпочитает сохранить перед закрытием.Когда пользователи нажимают «Сохранить», происходит та же логика, что и раньше, но я вынужден ждать завершения этого вызова в потоке пользовательского интерфейса (в случае возникновения ошибок в асинхронном вызове или чего-либо еще), и я не могунайти способ сделать это по-другому, не блокируя поток пользовательского интерфейса.
Есть предложения?Спасибо!
--- Редактировать ---- То, что я сейчас делаю, ждет всех моих WaitHandles в Presenter с этим циклом:
while (!WaitHandles.All(h => h.WaitOne(1)))
Application.DoEvents();
Это выглядит немного грязно.. но, по крайней мере, он имитирует не блокирование потока.Это то, что я по какой-то причине не должен делать?