1

我对这两者协同工作有一个疑问,因为我不相信它们是齐头并进的。

我有一些使用后台工作者的代码,并在 DoWork() 中执行一些逻辑。此逻辑仅使用 TcpClient 对象并将数据发送到外部设备。

我的问题是在 DoWork() 中,我调用 AutoResetEvent.WaitOne()。这是否会停止当前线程,直到调用 AutoResetEvent.Set()?例如,如果 AutoResetEvent.Set() 从未被调用过,Background Worker 会简单地停止并且不执行任何操作吗?

不确定这是否本质上是糟糕的设计,但不幸的是支持它:(

编辑一些伪代码

bool done = false;
while (!done)
{
  //some logic here
  done = System.DateTime.Now.Hour == 10;

  if (!done)
  {
    AutoResetEvent.WaitOne();
    //Question will the while loop fire again or does it wait for the Set() to be called
    //before continuing?
  }
}
4

1 回答 1

0

DoWork()我打电话AutoResetEvent.WaitOne()。这会停止当前线程直到AutoResetEvent.Set()被调用吗?例如,如果AutoResetEvent.Set()从未调用过,是否会Background Worker简单地停止并且不执行任何操作?

答案是肯定的,正如MSDN WaitHandle.WaitOne Method所引用的那样:

阻塞当前线程,直到当前 WaitHandle 收到信号。

编辑:对于您添加的代码,while 循环将等待Set()

于 2013-07-03T10:39:04.817 回答