sti*_*k81 36 .net wpf invoke dispatcher
我正在构建一个WPF应用程序.我正在与服务器端进行一些异步通信,我在客户端上使用Prism进行事件聚合.这两件事导致产生新的线程,而不是UI线程.如果我尝试在这些回调和事件处理程序线程上执行"WPF操作",那么世界将会崩溃,现在它已经开始了.
首先,我遇到了尝试在服务器回调中创建一些WPF对象的问题.我被告知线程需要在STA模式下运行.现在我正在尝试更新Prism事件处理程序中的一些UI数据,我被告知:
调用者无法访问此线程,因为另一个线程拥有它.
所以; 在WPF中解决问题的关键是什么?我在这篇MSDN帖子中读到了WPF Dispatcher .我开始明白了,但我还没有巫师.
有人想帮我清理一下吗?任何相关的建议等?谢谢!
Cha*_*lie 37
一个接一个地回答你的每个问题:
Invoke
一切.关键是只在必要时才调用UI线程.为此,您可以使用Dispatcher.CheckAccess方法.Invoke
在必要时使用.话虽如此,在某些方面它是不可避免的,所以不,我不会说这是不好的做法.它只是您不时遇到的问题的一种解决方案.Dispatcher.CurrentDispatcher
.对于复杂的情况,这可能还不够,但我(个人)还没有看到它们.Dispatcher
可以用来访问应用程序的UI线程.但它本身并不是UI线程.BackgroundWorker
通常在您执行耗时的操作时使用,并且希望在后台运行该操作时维护响应式UI.通常,您不使用BackgroundWorker 而不是 Invoke,而是将BackgroundWorker 与 Invoke 结合使用.也就是说,如果需要更新BackgroundWorker中的某个UI对象,则可以调用UI线程,执行更新,然后返回到原始操作.有很多事BackgroundWorker
要说,我相信很多问题都已经投入使用,所以我不会深入探讨.如果您很好奇,请查看BackgroundWorker类的MSDN页面.
归档时间: |
|
查看次数: |
13722 次 |
最近记录: |