У нас есть приложение WPF (фактически приложение VSTO WPF). В некоторых элементах управления есть несколько элементов, которые при нажатии загружают данные из веб-службы и обновляют пользовательский интерфейс. Прямо сейчас мы выполняем эти веб-запросы синхронно, блокируя поток пользовательского интерфейса, пока ответ не вернется. Это предотвращает щелчок пользователя по приложению во время загрузки данных, потенциально переводя его в недопустимое состояние для обработки данных при их возврате.
Конечно, приложение перестает отвечать на запросы, если запрос занимает много времени. В идеале мы хотели бы, чтобы кнопка отмены была активной в это время, но не более того. Есть ли умный способ сделать это, или мы должны будем переключать запросы для асинхронного выполнения с использованием backgroundworker и писать что-то, что отключает все элементы управления, кроме кнопки отмены, пока выполняется запрос?
edit: для действий, которые мы уже ожидаем, чтобы они выполнялись долго (загрузка файла и т. Д.), Мы открываем диалоговое окно прогресса. Например, вы ожидаете, что действие будет довольно быстрым (максимум пару секунд), но иногда занимает больше времени. В этих обстоятельствах вспыхивание целого окна на мгновение слишком отвлекает.