2013-01-02 2 views
3

.NET 스레드 상태를 가져 오려고합니다.
이 경우 ProcessThread.ThreadState 속성을 확인합니다.
그러나 해당 스레드에서 Thread.Sleep을 사용하고 해당 상태를 Process Explorer으로 확인하면 - "대기 : 지연 실행"에있는 것을 볼 수 있지만 ThreadState는 여전히 "실행 중"입니다.
어떻게 그럴 수 있습니까?C# 스레드 상태 및 "휴면"

+3

당신이'ThreadState'에 액세스하기 전에'Process' 객체에'Refresh'를 호출 사용해 볼 수 있습니까? –

+0

디버깅을 위해이 작업을 수행하고 있습니까? ['ThreadState'] (http://msdn.microsoft.com/en-us/library/system.threading.thread.threadstatus.aspx) : "스레드 상태는 디버깅 시나리오에만 관심이 있으며 코드는 절대로 스레드를 사용해서는 안됩니다 상태를 스레드의 활동을 동기화합니다. " –

+0

@mikez : 나는 그 프로세스에서 "Refresh"를 호출했지만, ProcessThread의 복사본을 유지하고 새로운 것으로 보았다. 왜냐하면 새로 고침 될 것이라고 생각했기 때문이다. 이것을 답변으로 게시하면 동의 할 것입니다. thanks :) – Idov

답변

1

Process 클래스는 처음 액세스 할 때 속성을 캐시하므로 업데이트 된 ThreadState을 얻으려면 Refresh 메서드를 호출해야 할 수 있습니다. ProcessThread 개체 (ProcessThreads 속성)는 부모 Process에 연결되어 있지 않으며 포함 된 값은 Refresh이 호출 될 때 업데이트되지 않는 것으로 보입니다. Process 개체를 다시 방문해야합니다.

뭔가 같은 :

Process p = Process.GetProcessByName("MyProcess); 

while(true) 
{ 
    p.Refresh(); 
    Console.WriteLine(p.ProcessThreads[0].ThreadState); 
    Thread.Sleep(1000); 
}