我正在构建一个WPF应用程序.我正在与服务器端进行一些异步通信,我在客户端上使用Prism进行事件聚合.这两件事导致产生新的线程,而不是UI线程.如果我尝试在这些回调和事件处理程序线程上执行"WPF操作",那么世界将会崩溃,现在它已经开始了.
首先,我遇到了尝试在服务器回调中创建一些WPF对象的问题.我被告知线程需要在STA模式下运行.现在我正在尝试更新Prism事件处理程序中的一些UI数据,我被告知:
调用者无法访问此线程,因为另一个线程拥有它.
所以; 在WPF中解决问题的关键是什么?我在这篇MSDN帖子中读到了WPF Dispatcher .我开始明白了,但我还没有巫师.
- 当我需要运行我不确定将在UI线程上调用的东西时,总是使用Dispatcher.Invoke的关键是什么?
- 如果它实际上是在UI线程上调用的,它是否重要,我还是做Dispatcher.Invoke?
- Dispatcher.Invoke =同步.Dispathcher.BeginInvoke = async?
- Dispatcher.Invoke会请求UI线程,然后停止等待吗?是不良做法和风险较低的程序?
- 我怎样才能得到调度员?Dispatcher.CurrentDispatcher会不会给我代表UI线程的调度程序?
- 是否存在多个Dispatcher,或者"Dispatcher"与应用程序的UI线程基本相同?
- 和BackgroundWorker有什么关系?我什么时候使用它呢?我认为这总是异步的?
- 在UI公寓模式下运行在UI线程上运行的所有内容(通过调用)吗?即如果我有需要在STA模式下运行的东西 - Dispatcher.Invoke会足够吗?
有人想帮我清理一下吗?任何相关的建议等?谢谢!