35
我正在构建一个WPF应用程序。我正在与服务器端进行一些异步通信,并在客户端使用Prism进行事件聚合。这两件事情都会导致产生新线程,这不是UI线程。如果我试图在这些回调和事件处理程序线程上执行“WPF操作”,世界将会崩溃,现在它已经开始执行。确保WPF中的UI线程上运行的东西
首先我遇到了尝试在服务器回调中创建一些WPF对象的问题。我被告知该线程需要在STA模式下运行。现在我试图更新Prism事件处理程序中的一些UI数据,并且我被告知:
调用者无法访问此线程,因为不同的线程拥有它。
所以; 在WPF中找对事物的关键是什么?我已经在this MSDN post的WPF Dispatcher上读过。我开始明白了,但我还不是巫师。
- 当我需要运行一些我不确定的东西时,总是使用Dispatcher.Invoke的关键是在UI线程上调用吗?
- 它是否真的在UI线程上调用它,并且我仍然执行Dispatcher.Invoke?
- Dispatcher.Invoke =同步。 Dispathcher.BeginInvoke =异步?
- 请问Dispatcher.Invoke请求UI线程,然后停下来等待它?它是不好的做法和风险较低的应对方案?
- 无论如何,我该如何获得调度员?请问Dispatcher.CurrentDispatcher总是给我代表UI线程的调度程序?
- 是否存在多个Dispatcher,或者“Dispatcher”与应用程序的UI线程基本相同?
- 和BackgroundWorker有什么关系?我什么时候用这个呢?我认为这总是异步?
- 运行在UI线程上的所有东西(通过被调用)是否在STA公寓模式下运行?即如果我有需要在STA模式下运行的东西 - Dispatcher.Invoke是否足够?
有人想为我清理一些东西吗?任何相关的建议,等等?谢谢!
非常感谢查理!这真的是澄清和帮助! – stiank81 2010-03-04 21:47:25
向列表中添加了第8个问题。我希望你可以更新你的答案,包括它:-) – stiank81 2010-03-04 22:42:50
哈哈 - 编辑回答你的最后一个问题。 – Charlie 2010-03-04 23:16:33