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タイムアウト後に呼び出して、信号を設定できる可能性が高いです。それは、将来スレッド#1へのリクエストがあるときはいつでも、WaitOne(10000)効果がなく、すぐにリリースされることを意味しますか?

2)タイムアウトの場合に電話をかけないようsetにする方法はありますか?Method2それはスレッド#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 に答える