Garantindo que as coisas sejam executadas no thread da interface do usuário no WPF

Estou construindo um aplicativo WPF. Estou fazendo alguma comunicação assíncrona com o lado do servidor e uso a agregação de eventos com o Prism no cliente. Ambas as coisas resultam em novos threads a serem gerados, que não são os threads da interface do usuário. Se eu tentar fazer "operações WPF" nesses segmentos de retorno de chamada e manipulador de eventos, o mundo desmoronará, o que agora começou a ser feito.

Primeiro, encontrei problemas ao tentar criar alguns objetos WPF no retorno de chamada do servidor. Foi-me dito que o thread precisava ser executado no modo STA. Agora estou tentando atualizar alguns dados da interface do usuário em um manipulador de eventos Prism, e disseram-me que:

O chamador não pode acessar este segmento porque um segmento diferente é o proprietário.

Assim;qual é a chave para acertar as coisas no WPF? Eu li o Dispatcher WPF emesta postagem do MSDN. Estou começando a entender, mas ainda não sou um mago.

É a chave para sempre usar o Dispatcher.Invoke quando preciso executar algo que não tenho certeza se será chamado no thread da interface do usuário?Importa se ele realmente foi chamado no thread da interface do usuário e eu faço o Dispatcher.Invoke de qualquer maneira?Dispatcher.Invoke = de forma síncrona. Dispathcher.BeginInvoke = assíncrono?O Dispatcher.Invoke solicitará o thread da interface do usuário e parará para esperar por ele? É má prática e risco de programas menos responsivos?Como recebo o despachante? Dispatcher.CurrentDispatcher sempre me fornecerá o expedidor que representa o thread da interface do usuário?Haverá mais de um Dispatcher ou "Dispatcher" é basicamente o mesmo que o thread da interface do usuário para o aplicativo?E qual é o problema com o BackgroundWorker? Quando eu uso isso? Presumo que isso seja sempre assíncrono?Tudo o que é executado no thread da interface do usuário (sendo chamado) será executado no modo de apartamento STA? I.e. se eu tiver algo que precise ser executado no modo STA - o Dispatcher.Invoke será suficiente?

Alguém quer esclarecer as coisas para mim? Alguma recomendação relacionada, etc? Obrigado!

questionAnswers(1)

yourAnswerToTheQuestion