2

我有一个 WPF 应用程序,其中有两个在加载时运行的后台工作线程。

第一个(bw1)在应用程序启动时产生,第二个(bw2)在经过一段时间后产生。

我处于无法从第一个(bw1)“worker_completed”中生成第二个后台工作人员( bw2 )的情况。

目前,我有一个类级 bool 变量(默认false),并将其设置truebw1的 worker_completed 中。

bw2开始时,我检查上面的 bool 是否为假,如果是,bw2将休眠 100 毫秒。

这在大多数情况下都有效。我想改进它。

  • 我可以在bw1中使用线程优先级(例如将其设置为最高)以确保在bw2休眠时执行bw1吗?

  • 有没有一种事件驱动的方式可以实现这个目标?

4

1 回答 1

3

当您实际上不知道事件何时发生时,忙于旋转(即使处于睡眠状态)是一个坏主意,因为您正在盲目检查并不必要地使用系统资源。

改用一个AutoResetEvent。在 bw2 的代码调用开始ev.WaitOne()和 bw1work_completed调用ev.Set()释放 bw2 时:

AutoResetEvent ev = new AutoResetEvent();

// bw1's work completed     
private void bw1_workCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    ev.Set(); // release bw2 from waiting
}

// bw2's do work
private void bw2_DoWork(object sender, DoWorkEventArgs e)
{
    ev.WaitOne(); // wait for the signal from bw1
    // code
}
于 2012-03-13T18:12:58.933 回答