3
我試圖讓一個.NET線程的狀態。
爲此我查看ProcessThread.ThreadState
屬性。
然而,當我在該線程使用Thread.Sleep
與Process Explorer
檢查其狀態 - 我看到它是在「等待:延遲Exectuion」,而我的ThreadState仍是「暗戰」。
這怎麼可能?C#線程的狀態和「睡眠」
我試圖讓一個.NET線程的狀態。
爲此我查看ProcessThread.ThreadState
屬性。
然而,當我在該線程使用Thread.Sleep
與Process Explorer
檢查其狀態 - 我看到它是在「等待:延遲Exectuion」,而我的ThreadState仍是「暗戰」。
這怎麼可能?C#線程的狀態和「睡眠」
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);
}
可以嘗試訪問'ThreadState'之前調用'Refresh'的'Process'對象? –
你是否爲了調試目的而這樣做? ['ThreadState'(http://msdn.microsoft.com/en-us/library/system.threading.thread.threadstate.aspx):「線程狀態只是在調試方案的興趣,您的代碼不應該使用線程。狀態來同步線程的活動。「 –
@mikez:我也呼籲這個過程「刷新」,但我一直認爲ProcessThread的副本,並看着它的新的替代,因爲我認爲這也將被刷新。如果您以此作爲答案,我會接受它。謝謝:) – Idov