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