Я создаю приложение WPF. Я выполняю асинхронную связь с серверной частью, и я использую агрегацию событий с Prism на клиенте. Обе эти вещи приводят к появлению новых потоков, которые не являются потоком пользовательского интерфейса. Если я попытаюсь выполнить "операции WPF" в этих потоках обратного вызова и обработчика событий, мир распадается, и теперь он начал делать.
Сначала я встретил проблемы с попыткой создать некоторые объекты WPF в обратном вызове с сервера. Мне сказали, что поток нужен для запуска в режиме STA. Теперь я пытаюсь обновить некоторые данные пользовательского интерфейса в обработчике событий Prism, и мне сказали, что:
Вызывающий не может получить доступ к этому потоку, потому что ему принадлежит другой поток.
Итак, Какой ключ к правильному использованию WPF? Я прочитал в Диспетчере WPF в этот пост MSDN. Я начинаю это делать, но пока я еще не волшебник.
- Является ли ключ всегда использовать Dispatcher.Invoke, когда мне нужно запустить что-то, что я не уверен, будет вызван в потоке пользовательского интерфейса?
- Неважно, действительно ли он был вызван в потоке пользовательского интерфейса, и я все равно Dispatcher.Invoke?
- Dispatcher.Invoke = синхронно. Dispathcher.BeginInvoke = async?
- Будет ли Dispatcher.Invoke запрашивать поток пользовательского интерфейса, а затем перестать его ждать? Это плохая практика и риск менее гибких программ?
- Как мне получить диспетчер? Будет ли Dispatcher.CurrentDispatcher всегда давать мне диспетчер, представляющий поток пользовательского интерфейса?
- Будет ли более одного диспетчера или "Диспетчер" в основном такой же, как поток пользовательского интерфейса для приложения?
- А какая сделка с BackgroundWorker? Когда я использую это вместо этого? Я предполагаю, что это всегда асинхронно?
- Будет ли запущено все, что работает в потоке пользовательского интерфейса (путем вызова), в режиме квартиры STA? То есть если у меня есть что-то, что требуется для запуска в режиме STA - будет ли Dispatcher.Invoke достаточно?
Кто-нибудь хочет очистить вещи для меня? Любые соответствующие рекомендации и т.д.? Благодарю!