1

来自 MSDN “如果没有等待线程,则等待句柄保持信号状态,直到线程尝试等待它,或者直到它的Reset方法被调用。”

EventWaitHandle MyWaitHandle = new AutoResetEvent(false);

线程#1:

public void Method1()
{
  //do something
  //wait for the signal or timeout
  MyWaitHandle.WaitOne(10000);
  //do something else on receiving signal or after timeout
}

线程#2:

//this would be called when there is a response from the external app
public void Method2()
{
  //do something
  //send the signal to waiting thread
  MyWaitHandle.Set();
}

在我的应用程序中,线程 #1 正在向外部应用程序提交请求并等待信号或超时。如果收到来自外部应用程序线程#2 的响应,则设置等待句柄。即使set在超时之后也可以调用它。我的问题是

1)极有可能Method2在超时后调用导致设置信号。这是否意味着以后只要有对 Thread #1 的请求,它就WaitOne(10000)没有任何作用,会立即释放?

2) 无论如何我不能setMethod2超时的情况下打电话吗?这会对 Thread #1 造成任何问题吗?

4

1 回答 1

2

为什么不在等待之前确保等待句柄总是被重置呢?

public void Method1()
{
  // Reset the wait handle I'll be using...
  MyWaitHandle.Reset();

  //do something
  //wait for the signal or timeout
  MyWaitHandle.WaitOne(10000);
  //do something else on receiving signal or after timeout
}
于 2012-02-06T18:21:50.920 回答