gpt4 book ai didi

c# - 为什么用空委托(delegate)调用 ThreadStart?

转载 作者:行者123 更新时间:2023-11-30 14:35:06 26 4
gpt4 key购买 nike

在我必须维护的旧应用程序中进行一些取证考古调查时,我遇到了这个:

这是一个最近转换为 .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 - 调用带有空操作委托(delegate)的线程(主图形用户界面)可能会产生什么副作用。其他两个线程也在主 gui 线程上执行调用,但只有这个线程将优先级设置为 Normal 以外的其他东西(尽管它们使用 Action 而不是 TreadStart)。

2 - 我遇到过与此应用程序异常相似的死锁情况,有些事情告诉我这可能是原因。 (无缘无故地绕过优先级和主 gui 线程)。

谢谢

最佳答案

此线程将导致调用函数阻塞,直到 Dispatcher 的线程可以“处理”(无操作)委托(delegate)。

这可能不是一个好的做法,应该被删除。我怀疑这里的目标是让这个(第三个)BackgroundWorker 的完成事件成为前两个 BackgroundWorker 完成时的信号.

一般来说,像这样旋转完成通常是糟糕设计的标志。更好的设计是使用 CountdownEvent ,这可以由两个 BackgroundWorker 实例在完成时发出信号。

然后您可以等待倒计时事件,而不是循环使用 Thread.Sleep 和调度程序调用。

关于c# - 为什么用空委托(delegate)调用 ThreadStart?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12903564/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com