使用Dispatcher切换到UI线程的正确语法

时间:2014-02-25 07:50:17

标签: c# .net wpf multithreading dispatcher

之间有什么区别
Dispatcher.CurrentDispatcher.Invoke(somemethod);

Application.Current.Dispatcher.Invoke(somemethod);

当我使用第一个方法时,某些方法的执行速度比第二个方法快。我使用秒表并测量经过的毫秒数。我使用此方法根据来自外部线程的一些数据更新一些UI控件。

1 个答案:

答案 0 :(得分:6)

Dispatcher.CurrentDispatcher会为您提供与当前线程相关联的调度程序,您将调用此方法。

Application.Current.Dispatcher将获得与UI线程关联的调度程序(假设您的应用程序是从UI线程启动的)。


本质上,如果您从后台线程调用委托并尝试从中更新UI组件,请说

textBlock.Text = "Test";

第一种方法将失败,因为它将在后台线程调度程序上调用委托,并且只能从UI线程修改UI组件。

第二种方法可行,因为它会在UI线程上委托任务。


  

当我使用第一个时,执行某些方法会更快   比第二个。我用秒表测量了经过的时间   milliseconds.I使用此方法更新一些基于的UI控件   一些来自外部线程的数据。

如果第一种方法适用于您那么根本不需要使用Dispatcher,因为这意味着您已经在UI线程

您需要发布样本数据以便观察时间,以便进行验证。