2010-07-18 2 views
0

도움을 주셔서 미리 감사드립니다."AsyncWaitHandle.WaitOne()"을 취소하는 방법이 있습니까?

내 코드의 어느 시점에서 AsyncWaitHandle.WaitOne()을 취소하고 싶습니다. (더 이상 차단하고 싶지는 않습니다.)하지만 그 방법을 찾을 수 없습니다. 아마, 그것은 내 프로그램의 논리적 인 문제이지만, 출구 신호가 주어 지 자마자 루프에서 벗어나는 다른 방법을 생각할 수 없다. 문제가있는 코드는 다음과 같습니다.

s.Bind(endPoint); 
s.Listen(15); 
while (true) { 
    thrd = s.BeginAccept(new AsyncCallback(Accept_Callback), s); 
    thrd.AsyncWaitHandle.WaitOne(); // it still blocks here when next statement becomde "true" 
    if (_syncEvents.ExitThreadEvent.WaitOne(0, false)) 
    { 
     //I want to break out of the loop at this point, it breaks out only when next call coming 
     thrd.AsyncWaitHandle.Close(); 
     s.Close(); 
     break; 
    } 
} 

감사합니다.

아론 첸

답변

2

당신은 수동 리셋 이벤트를 사용할 수 있습니다

ManualResetEvent evt = new ManualResetEvent(false); 

    WaitHandle[] handles = new WaitHandle[] { evt, thrd.AsyncWaitHandle }; 

    WaitHandle.WaitAny(handles); 

그런 다음, 다른 스레드에서 호출

evt.Set(); 

소켓을 해제 할 수 있습니다.

+0

감사합니다. Paul Keister, 나는 그것을 시도해보고 어떻게 될지 알려주겠습니다. 감사합니다! 아론 – AaronChen

+0

폴, 내 문제를 해결해 주셔서 감사합니다. 아론 – AaronChen

관련 문제