Deployment.Current.Dispatcher.BeginInvoke(()=>{})是如何工作的?

本文关键字:何工作 工作 Dispatcher Current BeginInvoke Deployment | 更新日期: 2023-09-27 18:17:23

每当我在windows phone项目中得到无效的交叉线程访问错误时,我在Deployment.Current.Dispatcher.BeginInvoke(() => {})内执行我的代码,之后一切工作正常。然而,我从来没有清楚地理解它的意思。

有人能给它一些光给详细解释一下它是如何解决我的交叉线程错误和它的每个部分的意思。据我搜索,它是用来在UI线程上执行一些代码。

但是什么是部署对象、当前对象和调度对象呢?我还能怎么用呢?TIA

Deployment.Current.Dispatcher.BeginInvoke(()=>{})是如何工作的?

问题出在Windows平台的设计上。你不能改变用户界面(特别是Win32对象)从另一个线程,然后对象创建。

Dispatcher.BeginInvoke在UI线程上执行作为参数提供的委托,而不是在调用它的线程上。

Deployment.Current是当前运行的应用程序的单例引用,Dispatcher是程序中负责传递消息的部分。BeginInvoke的方法,实际上找到正确的线程,并执行委托。

BeginInvokeInvoke的区别在于前者是异步运行的。

Invoke立即执行,直到方法完成为止。