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

时间:2014-08-10 11:35:26

标签: c# windows-phone-8 dispatcher

每当我在Windows Phone项目中收到Invalid-CrossThread-Access错误时,我会在Deployment.Current.Dispatcher.BeginInvoke(() => {})内执行我的代码,之后一切正常。但是我从来没有清楚地理解它的含义。

有人可以对它进行一些说明,详细解释它如何解决我的交叉线程错误及其各个部分的含义。据我搜索它,它用于在UI线程上执行一些代码。

但是什么是部署,当前和调度程序对象。我怎么能用它们呢。 TIA

1 个答案:

答案 0 :(得分:3)

问题在于Windows平台的设计。您无法从另一个线程更改用户界面(特别是Win32对象),然后从中创建对象。

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

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

第一个异步运行的BeginInvokeInvoke之间的区别。 Invoke立即执行,执行暂停,直到方法结束。