2013-01-02 166 views
3

我試圖讓一個.NET線程的狀態。
爲此我查看ProcessThread.ThreadState屬性。
然而,當我在該線程使用Thread.SleepProcess Explorer檢查其狀態 - 我看到它是在「等待:延遲Exectuion」,而我的ThreadState仍是「暗戰」。
這怎麼可能?C#線程的狀態和「睡眠」

+3

可以嘗試訪問'ThreadState'之前調用'Refresh'的'Process'對象? –

+0

你是否爲了調試目的而這樣做? ['ThreadState'(http://msdn.microsoft.com/en-us/library/system.threading.thread.threadstate.aspx):「線程狀態只是在調試方案的興趣,您的代碼不應該使用線程。狀態來同步線程的活動。「 –

+0

@mikez:我也呼籲這個過程「刷新」,但我一直認爲ProcessThread的副本,並看着它的新的替代,因爲我認爲這也將被刷新。如果您以此作爲答案,我會接受它。謝謝:) – Idov

回答

1

Process類緩存首次訪問時的屬性,因此您可能需要調用Refresh方法以獲取更新的ThreadState。看來,ProcessThread對象(從ProcessThreads屬性)沒有連接到母體Process,當Refresh被稱爲不更新它所包含的值。您將需要再次通過Process對象。

喜歡的東西:

Process p = Process.GetProcessByName("MyProcess); 

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