Фоновая работа, которая выполняет изменение интерфейса и модальный диалог - PullRequest
0 голосов
/ 14 марта 2011

У меня есть приложение на C # / WPF, которое будет выполнять множество действий, включая изменения пользовательского интерфейса (это загрузка макроса), но я хочу иметь модальное окно с чем-то движущимся, говорящее об ожидании.

Работа с макросом загрузки должна выполняться в главном потоке приложения, но как распечатать модальное окно, поскольку оно должно быть не заблокировано загрузкой макроса, а в потоке приложения, потому что это пользовательский интерфейс.

В настоящее время я помещаю LoadMacro в BackgroundWorker в Application.Current.Dispatcher.Invoke при отображении моего диалогового окна ожидания.Но это не удовлетворяет, потому что они сражаются друг с другом, чтобы обновить интерфейс.

Так как мне это сделать?

1 Ответ

4 голосов
/ 14 марта 2011

Вам не нужно запускать фонового рабочего из любого диспетчера.

Загрузите ваше модальное окно и затем запустите фонового работника, подписавшись на его событие ProgressChanged. Затем вы можете ReportProgress на фоновом рабочем месте передать все, что вам нравится, чтобы обновить окно модели в свойстве UserState.

http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.progresschanged.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...