2013-06-04 3 views
1

보조 스레드를 생성하는 주 스레드가 있습니다. 이 보조 스레드는 특정 작업을 수행 한 후 대기하기 위해 EventWaitHandle.WaitOne을 사용 중입니다.EventWaitHandle.WaitOne이 보조 스레드에서 호출되었는지 확인하는 방법

보조 스레드가 대기 상태로 전환 될 때 주 스레드가 신호를 보낼 수있는 방법이 있습니까?

은 내가 WaitOne() -method가 호출 될 때 스레드가 WaitSleepJoin 상태에 있는지 여부를 결정하기 위해 System.Threading.ThreadState 속성을 사용했지만, 스레드가 항상 Running 상태로 나타나는이 방법은 작동하지 않습니다. 작업자 스레드에서

:

+0

왜 다른 waithandle을 사용하지 않습니까? – Rotem

+1

다른 이벤트가 있고 두 번째 스레드가 대기하기 바로 전에 신호를 보낼 수 있습니다. – Bunny

답변

3

당신은 메인 스레드 알리기 위해 둘째으로 ManualResetEvent를 사용할 수 있습니다 나는 fololowing 테스트 응용 프로그램을 작성했다

var isWaiting = signalEWH.WaitOne(0); 

메인 스레드에서

signalEWH.Set(); 

commonEWH.WaitOne(); 

signalEWM.Reset(); 

및 그것은 나에게 잘 작동한다.

 class Program 
{ 
    static void Main(string[] args) 
    { 
     var thr = new Thread(new ThreadStart(SecondThread)); 
     thr.IsBackground = true; 
     thr.Start(); 

     firstEvent.WaitOne(); 

     var isSleep = thr.ThreadState.HasFlag(ThreadState.WaitSleepJoin); 
    } 

    static ManualResetEvent firstEvent = new ManualResetEvent(false); 
    static ManualResetEvent secondEvent = new ManualResetEvent(false); 

    static void SecondThread() 
    { 
     firstEvent.Set(); 
     secondEvent.WaitOne(); 
     firstEvent.Reset(); 
    } 
} 
+0

System.Threading.ThreadState 속성이 작동하지 않는 이유는 무엇입니까? – user2354592

+0

대답에 변화가 있는지 조사해주세요. –

관련 문제