我在某些代码中看到过这种Deployment.Current.Dispatcher.BeginInvoke(()=&gt; {...})格式。它曾经在后台做过一些工作吗?它的一般用途是什么?< / p>
答案 0 :(得分:41)
不,它不是在后台线程中工作 - 它是在 UI 线程上工作的。因此,通常从后台线程调用,以便操作UI,这只能在UI线程上完成。
lambda表达式的主体是您要在UI线程中执行的代码。
答案 1 :(得分:6)
当更新UI的代码从UI线程以外的线程执行时,会发生无效的跨线程访问异常。
调度程序允许您将一些代码从另一个线程传递到UI线程。
我在这篇文章中提出的项目证明了这一点以及其他概念。
WebClient, HttpWebRequest and the UI Thread on Windows Phone 7
答案 2 :(得分:2)
当您发现自己在非UI工作线程中工作时(在不从DependencyObject继承的上下文中)并且您需要更新时,您需要在SilverLight应用程序中使用Deployment.Current。Dispatcher用户界面。