イベントがトリガーされるのを待たなければなりません。私の最初の解決策はAutoResetEvent
andを使用することでしたが、待機タイムアウトが終了した直後にWaitOne()
イベントが常にトリガーされました。そこで、以下のアプローチに戻りましたが、それでも同じ問題があります。タイムアウトが終了してから2〜3秒後に、タイムアウトが何であったかに関係なく、イベントがトリガーされます。
_wait = true;
_delayedResponse = null;
var thread = new Thread(delegate
{
while (_wait)
{
Thread.Sleep(500);
if (_delayedResponse != null)
return;
}
});
thread.Start();
var received = thread.Join(_responseTimeout);
_wait = false;
if (!received)
throw new TimeoutException(
"Timeout for waiting for response reached.");
return _delayedResponse;
イベントハンドラコードは次のとおりです。
private void OnResponseArrived(object sender, ResponseEventArgs args)
{
_delayedResponse = args.VerificationResponse;
}
イベント自体は、上記の関数を呼び出す別の関数からトリガーされます。基本的には次のようになります。
var result = DoStuff(); // Library function that is responsible for the event
if (result.Status == Status.Wait)
Wait(); // Function above
誰かがこの問題の原因と私がそれを解決する方法を知っていますか?
編集:もう関係ありません。時間内に他の解決策が見つからなかったため、OnResponseArrivedイベントを転送しました。