我必須等待事件被觸發。我最初的解決方案是使用AutoResetEvent
和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事件,因爲我沒有及時發現其他解決方案。
你從哪裏觸發事件? – 2011-01-27 12:35:59
什麼意思是「事件被觸發,無論超時是什麼」? `ResponseArrived`事件?你確定這個事件是從另一個線程發起的嗎? – Groo 2011-01-27 12:39:32
謝謝你的評論。我更新了這個問題。 – xsl 2011-01-27 12:39:38