共用方式為


Managed 執行緒狀態

更新:2007 年 11 月

Thread.ThreadState 屬性提供指示執行緒目前狀態的位元遮罩。執行緒一定處於 ThreadState 列舉型別中至少一種可能的狀態下,並且可能同時處於多種狀態。

重要事項:

執行緒狀態只有在少數偵錯案例中會用到。絕對不要在您的程式碼中使用執行緒狀態來同步執行緒活動。

當您建立 Managed 執行緒時,它是處於 Unstarted 狀態。此執行緒會維持 Unstarted 狀態,直到它被作業系統移至啟動狀態為止。呼叫 Start 可讓作業系統知道執行緒可以啟動了,它不會變更執行緒的狀態。

進入 Managed 環境的 Unmanaged 執行緒已處於啟動狀態。一旦處於啟動狀態,就會有數個動作可引發執行緒變更狀態。下列表格列出引發變更狀態的動作,以及對應的新狀態。

動作

產生的新狀態

另一個執行緒會呼叫 Thread.Start

未變更

執行緒回應 Thread.Start 並開始執行。

Running

執行緒會呼叫 Thread.Sleep

WaitSleepJoin

執行緒呼叫另一個物件上的 Monitor.Wait

WaitSleepJoin

執行緒呼叫另一個執行緒上的 Thread.Join

WaitSleepJoin

另一個執行緒會呼叫 Thread.Suspend

SuspendRequested

執行緒回應 Thread.Suspend 要求。

Suspended

另一個執行緒會呼叫 Thread.Resume

Running

另一個執行緒會呼叫 Thread.Suspend

Running

另一個執行緒會呼叫 Thread.Abort

AbortRequested

執行緒回應 Thread.Abort

Aborted

因為 Running 狀態的值為 0,所以無法執行位元測試來探索 (Discover) 這個狀態。而是可使用下列測試 (虛擬程式碼):

if ((state & (Unstarted | Stopped)) == 0)   // implies Running   

在任何指定的時間內,執行緒通常處於一種以上的狀態內。例如,如果執行緒被封鎖,無法進行 Monitor.Wait 呼叫,且另一個執行緒呼叫位於同一執行緒上的 Abort,則執行緒會同時處於 WaitSleepJoinAbortRequested 狀態。在這個情況下,只要執行緒從Wait 的呼叫返回或被中斷,就會收到 ThreadAbortException

一旦執行緒因呼叫 Start 而離開 Unstarted 狀態,就不會再回到 Unstarted 狀態。執行緒絕不能離開 Stopped 狀態。

請參閱

參考

ThreadAbortException

Thread

ThreadState

其他資源

Managed 執行緒