C# Deployment.Current.Dispatcher.BeginInvoke(()=>;{…})的用途是什么?

C# Deployment.Current.Dispatcher.BeginInvoke(()=>;{…})的用途是什么?,c#,silverlight-4.0,windows-phone-7,C#,Silverlight 4.0,Windows Phone 7,我在一些代码中看到过这种部署.Current.Dispatcher.BeginInvoke(()=>{…})格式。它是否用于在后台执行某些工作?它的一般用途是什么?当更新UI的代码从UI线程以外的线程执行时,会发生无效的跨线程访问异常 dispatcher允许您将一些代码从另一个线程传递到UI线程 我在这篇文章中的项目演示了这一点,以及其他概念 不,不是在后台线程中工作,而是在UI线程中工作。因此,它通常是从后台线程调用的,以便操作UI,这只能在UI线程上完成 lambda表达式的主体是要在UI

我在一些代码中看到过这种部署.Current.Dispatcher.BeginInvoke(()=>{…})格式。它是否用于在后台执行某些工作?它的一般用途是什么?

当更新UI的代码从UI线程以外的线程执行时,会发生无效的跨线程访问异常

dispatcher允许您将一些代码从另一个线程传递到UI线程

我在这篇文章中的项目演示了这一点,以及其他概念


不,不是在后台线程中工作,而是在UI线程中工作。因此,它通常是从后台线程调用的,以便操作UI,这只能在UI线程上完成


lambda表达式的主体是要在UI线程中执行的代码。

您需要使用Deployment.Current。在SilverLight应用程序中,当您发现自己在非UI工作线程(在不从DependencyObject继承的上下文中)中工作,并且需要更新UI时。

Jon,您在SO上的帖子非常受欢迎。我向你致敬:)还有一点很重要,就是在现有的UI操作队列为空之后,可以从UI线程本身使用BeginInvoke来执行UI线程上的后续操作。本质上是推迟工作,直到UI线程不再做任何事情。@JonSkeet:我如何在后台线程中执行代码,因为这些代码阻止了我的进度条显示在屏幕上UI@Rohaan:这取决于代码需要做什么。如果它正在构建UI,它不应该位于后台线程上。如果它从其他地方(例如)获取数据,那么在后台线程中这样做是合适的。这与这个问题是否有明显的关系还不清楚…@JonSkeet:谢谢你的回答。。。请看我今天在上面的链接上发布的问题