我必须等待触发事件。我最初的解决方案是使用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 事件,因为我没有及时找到其他解决方案。