我遇到了一个代码,其中包含Dispatcher.BeginInvoke方法,我用谷歌搜索它以了解更多信息,但没有找到任何好的教程。任何人都可以解释什么是Dispatcher.BeginInvoke以及在什么情况下我应该使用它...
我在某处读过它用于更新UI元素,我正在更新UI元素并且从未发现任何困难。
请解释为什么要在wp8 silverlight应用程序中使用它。
答案 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线程的调度程序对象。