在我必须维护的旧应用程序中进行一些取证考古调查时,我遇到了这个:
这是一个最近转换为 .NET 4.0 的 WPF 应用程序,此代码在后台工作程序中运行
if(bgWorker1.IsBusy || bgWorker2.IsBusy)
{
Thread.Sleep(100);
Application.Current.Dispatcher.Invoke(
System.Windows.Threading.DispatcherPriority.Background,
new System.Threading.ThreadStart(delegate { })
);
}
1 - 通过使用无操作委托调用线程(主 gui)可以实现什么可能的副作用。其他两个线程也在主 gui 线程上执行调用,但只有这个线程将优先级设置为 Normal 以外的其他内容(尽管它们使用 Action 而不是 TreadStart)。
2 - 我有一些奇怪地类似于此应用程序死锁的案例,并且有些事情告诉我这可能是原因。(无缘无故地绕过优先级和主 gui 线程)。
谢谢