TRS*_*TRS 1 .net c# wpf multithreading dispatcher
有什么区别
Dispatcher.CurrentDispatcher.Invoke(somemethod);
Run Code Online (Sandbox Code Playgroud)
和
Application.Current.Dispatcher.Invoke(somemethod);
Run Code Online (Sandbox Code Playgroud)
当我使用第一个方法时,某些方法的执行速度比第二个方法快.我使用秒表并测量经过的毫秒数.我使用此方法根据来自外部线程的一些数据更新一些UI控件.
Dispatcher.CurrentDispatcher将获得与您调用此方法的当前线程关联的调度程序.
然而,您Application.Current.Dispatcher将获得与UI线程关联的调度程序(假设您的应用程序是从UI线程启动的).
本质上,如果您从后台线程调用委托并尝试从它更新UI组件说
textBlock.Text = "Test";
Run Code Online (Sandbox Code Playgroud)
第一种方法将失败,因为它将在后台线程调度程序上调用委托,并且只能从UI线程修改UI组件.
第二种方法将起作用,因为它将委托UI线程上的任务.
当我使用第一个方法时,某些方法的执行速度比第二个方法快.我使用秒表并测量经过的毫秒数.我使用此方法根据来自外部线程的一些数据更新一些UI控件.
如果第一种方法适合您,则根本不需要使用Dispatcher,因为这意味着您已经在UI线程上.
并且您需要发布样本数据以便观察时间,以便进行验证.
| 归档时间: |
|
| 查看次数: |
925 次 |
| 最近记录: |