【发布时间】:2014-11-07 10:13:47
【问题描述】:
我为“DoEvents”方法找到了这两个实现:
解决方案 1:
System.Windows.Application.Current.Dispatcher.Invoke(
System.Windows.Threading.DispatcherPriority.Background,
new System.Threading.ThreadStart(() => { }));
解决方案 2:
System.Windows.Application.Current.Dispatcher.Invoke(
System.Windows.Threading.DispatcherPriority.Background,
new System.Action(delegate { }));
您能解释一下这两种实现有什么区别,什么最适合使用?
谢谢。
【问题讨论】:
-
你认为你为什么需要这个? DoEvents 在 WinForms 中也很丑陋。
-
是的,我知道,但我遇到的情况是有一个正在运行的 BackgroundWorker,我应该暂停直到它“忙”。无论如何,我引用的两种实现有什么区别?
-
没有实际区别,只是代表的类型。 IMO,解决方案 2 可读性更好。
-
如果可以避免,请不要使用
DoEvents风格的方法(提示:您可以避免)。使用事件处理程序或某种延续机制(例如,async/await)来恢复执行。忙于等待只会增加您的 CPU 使用率。
标签: c# .net wpf dispatcher doevents