更新:2011 年 5 月
Thread.ThreadState 屬性提供指示執行緒目前狀態的位元遮罩。 執行緒一定處於 ThreadState 列舉型別中至少一種可能的狀態下,並且可能同時處於多種狀態。
重要事項 |
|---|
執行緒狀態只有在少數偵錯案例中會用到。絕對不要在您的程式碼中使用執行緒狀態來同步執行緒活動。 |
當您建立 Managed 執行緒時,它是處於 ThreadState.Unstarted 狀態。 執行緒會維持 Unstarted 狀態,直到您呼叫 Thread.Start 方法為止,這樣會讓執行緒進入 Running 狀態,如此作業系統就能夠排程其執行時間。
進入 Managed 環境的 Unmanaged 執行緒已啟動。 一旦執行緒啟動,就會有數個動作可能導致其變更狀態。 下列表格列出引發變更狀態的動作,以及對應的新狀態。
動作 |
產生的新狀態 |
|---|---|
會呼叫 Thread 類別的建構函式。 |
|
另一個執行緒會呼叫新執行緒上的 Thread.Start 方法,然後呼叫就會傳回。 |
|
執行緒會呼叫 Thread.Sleep。 |
|
執行緒呼叫另一個物件上的 Monitor.Wait。 |
|
執行緒呼叫另一個執行緒上的 Thread.Join。 |
|
另一個執行緒會呼叫 Thread.Suspend。 |
|
執行緒回應 Thread.Suspend 要求。 |
|
另一個執行緒會呼叫 Thread.Resume。 |
|
另一個執行緒會呼叫 Thread.Abort。 |
|
執行緒回應 Thread.Abort。 |
由於 Running 狀態的值為 0,因此無法執行位元測試來探索 (Discover) 這個狀態。 而是可使用下列測試 (虛擬程式碼):
if ((state & (Unstarted | Stopped)) == 0) // implies Running
在任何指定的時間內,執行緒通常處於一種以上的狀態內。 例如,如果執行緒遭到封鎖,無法進行 Monitor.Wait 呼叫,且另一個執行緒呼叫位於同一執行緒上的 Abort,則執行緒會同時處於 WaitSleepJoin 和 AbortRequested 狀態。 在這個情況下,只要執行緒從Wait 的呼叫返回或被中斷,就會收到 ThreadAbortException。
一旦執行緒因呼叫 Start 而離開 Unstarted 狀態,就不會再回到 Unstarted 狀態。 執行緒絕不能離開 Stopped 狀態。
請參閱
參考
其他資源
變更記錄
日期 |
記錄 |
原因 |
|---|---|---|
|
2011 年 5 月 |
進一步釐清 Thread.Start 方法和 Running 狀態之間的關聯性。 |
客戶回函。 |
|
2011 年 3 月 |
已釐清 Thread.Start 方法和 Running 狀態之間的關聯性。 |
內容 Bug 修正。 |
重要事項
注意事項