在Windows Phone应用程序中使用Dispatcher.BeginInvoke方法有什么用处

时间:2014-07-04 10:38:57

标签: c# windows-phone-7 windows-phone-8

我遇到了一个代码,其中包含Dispatcher.BeginInvoke方法,我用谷歌搜索它以了解更多信息,但没有找到任何好的教程。任何人都可以解释什么是Dispatcher.BeginInvoke以及在什么情况下我应该使用它...

我在某处读过它用于更新UI元素,我正在更新UI元素并且从未发现任何困难。

请解释为什么要在wp8 silverlight应用程序中使用它。

2 个答案:

答案 0 :(得分:3)

Dispatcher.BeginInvoke Method (Action)是一种方法,它在与Dispatcher关联的线程上异步执行指定的委托。它需要一个参数System.Action,我们想通过该线程异步执行。它返回值类型为System.Windows.Threading.DispatcherOperation一个对象,在调用BeginInvoke之后立即返回,表示已发布到Dispatcher队列的操作。

e.g。

Control.Dispatcher.BeginInvoke(() => {
        //Work to do with Thread
    //..............
    });

您需要在Windows Phone应用程序中执行的最常见任务之一是updating the UI from a separate thread。例如,您可能使用WebClient类异步下载某些内容,并且在操作完成后,您希望使用下载的内容更新UI。不允许直接从异步线程更新UI,因为UI控件不是线程安全的。

从异步线程更新UI的最简单方法是使用Dispatcher类。要确定是否可以直接更新UI,可以使用CheckAccess()方法。如果此方法返回true,则表示您可以直接更新UI。否则,您必须使用BeginInvoke()类的Dispatcher方法以线程安全的方式更新UI。

如需更多参考,请阅读本文Windows Phone Tip: Updating the UI from an Asynchronous Thread

答案 1 :(得分:1)

所有UI元素都应仅在UI线程中更新。每个线程都有自己的调度程序。如果您需要从非UI线程更新UI,您应该调用_dispatcher.BeginInvoke,其中_dispatcher是来自UI线程的调度程序对象。