每当我在Windows Phone项目中收到Invalid-CrossThread-Access错误时,我会在Deployment.Current.Dispatcher.BeginInvoke(() => {})
内执行我的代码,之后一切正常。但是我从来没有清楚地理解它的含义。
有人可以对它进行一些说明,详细解释它如何解决我的交叉线程错误及其各个部分的含义。据我搜索它,它用于在UI线程上执行一些代码。
但是什么是部署,当前和调度程序对象。我怎么能用它们呢。 TIA
答案 0 :(得分:3)
问题在于Windows平台的设计。您无法从另一个线程更改用户界面(特别是Win32对象),然后从中创建对象。
Dispatcher.BeginInvoke
执行在UI线程上作为参数提供的委托,而不是在调用它的线程上。
Deployment.Current
是对当前正在运行的应用程序的singleton引用,Dispatcher
是负责传递消息的程序的一部分。 BeginInvoke
实际找到正确的线程并执行委托的方法。
第一个异步运行的BeginInvoke
和Invoke
之间的区别。 Invoke
立即执行,执行暂停,直到方法结束。