Обеспечение запуска в потоке пользовательского интерфейса в WPF

Я создаю приложение WPF. Я делаю асинхронную связь со стороной сервера и использую агрегацию событий с Prism на клиенте. Обе эти вещи приводят к появлению новых потоков, которые не являются потоком пользовательского интерфейса. Если я попытаюсь выполнить «операции WPF» на этих потоках обратного вызова и обработчика событий, мир развалится, что он теперь начал делать.

Сначала я столкнулся с проблемами при попытке создать некоторые объекты WPF в обратном вызове с сервера. Мне сказали, что поток должен работать в режиме STA. Теперь я пытаюсь обновить некоторые данные пользовательского интерфейса в обработчике событий Prism, и мне сказали, что:

Вызывающий не может получить доступ к этому потоку, потому что другой поток владеет им.

Так;в чем ключ к тому, чтобы все было правильно в WPF? Я читал об Диспетчере WPF вэтот пост MSDN, Я начинаю понимать, но я еще не волшебник.

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

Кто-нибудь хочет прояснить для меня вещи? Любые связанные рекомендации и т.д? Спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос