Deployment.Current.Dispatcher.BeginInvoke(()=> {...})有什么用?

时间:2011-01-13 11:02:42

标签: c# silverlight-4.0 windows-phone-7

我在某些代码中看到过这种Deployment.Current.Dispatcher.BeginInvoke(()=&gt; {...})格式。它曾经在后台做过一些工作吗?它的一般用途是什么?< / p>

3 个答案:

答案 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用户界面。