之间有什么区别
Dispatcher.CurrentDispatcher.Invoke(somemethod);
和
Application.Current.Dispatcher.Invoke(somemethod);
当我使用第一个方法时,某些方法的执行速度比第二个方法快。我使用秒表并测量经过的毫秒数。我使用此方法根据来自外部线程的一些数据更新一些UI控件。
答案 0 :(得分:6)
Dispatcher.CurrentDispatcher
会为您提供与当前线程相关联的调度程序,您将调用此方法。
Application.Current.Dispatcher
将获得与UI线程关联的调度程序(假设您的应用程序是从UI线程启动的)。
本质上,如果您从后台线程调用委托并尝试从中更新UI组件,请说
textBlock.Text = "Test";
第一种方法将失败,因为它将在后台线程调度程序上调用委托,并且只能从UI线程修改UI组件。
第二种方法可行,因为它会在UI线程上委托任务。
当我使用第一个时,执行某些方法会更快 比第二个。我用秒表测量了经过的时间 milliseconds.I使用此方法更新一些基于的UI控件 一些来自外部线程的数据。
如果第一种方法适用于您那么根本不需要使用Dispatcher,因为这意味着您已经在UI线程。
您需要发布样本数据以便观察时间,以便进行验证。