ThreadState 列舉

定義

指定 Thread 的執行狀態。

此列舉支援其成員值的位元組合。

public enum class ThreadState
[System.Flags]
public enum ThreadState
[System.Flags]
[System.Runtime.InteropServices.ComVisible(true)]
public enum ThreadState
[System.Flags]
[System.Serializable]
public enum ThreadState
[System.Flags]
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public enum ThreadState
[<System.Flags>]
type ThreadState = 
[<System.Flags>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type ThreadState = 
[<System.Flags>]
[<System.Serializable>]
type ThreadState = 
[<System.Flags>]
[<System.Runtime.InteropServices.ComVisible(true)>]
[<System.Serializable>]
type ThreadState = 
Public Enum ThreadState
繼承
ThreadState
屬性

欄位

Aborted 256

執行緒狀態包括 AbortRequested,且執行緒目前無作用,但其狀態尚未變更為 Stopped

AbortRequested 128

Abort(Object) 方法已在執行緒上被叫用 (Invoke),但執行緒還沒有收到會嘗試終結它的暫止 ThreadAbortException

Background 4

執行緒正做為背景執行緒執行當中 (相對於前景執行緒)。 這個狀態以設定 IsBackground 屬性來控制。

Running 0

執行緒已啟動且尚未停止。

Stopped 16

執行緒已經停止。

StopRequested 1

執行緒正被要求停止中。 僅供內部使用。

Suspended 64

執行緒已經暫止。

SuspendRequested 2

執行緒正被要求暫止中。

Unstarted 8

Start() 方法還沒有在執行緒上被叫用。

WaitSleepJoin 32

執行緒已封鎖。 這可能是呼叫 Sleep(Int32)Join()、要求鎖定 (例如藉由呼叫 Enter(Object)Wait(Object, Int32, Boolean)),或是在執行緒同步處理物件 (例如 ManualResetEvent) 上等候的結果。

備註

列舉 ThreadState 會定義一組執行緒的所有可能執行狀態。 只有在幾個偵錯案例中才感興趣。 您的程式碼不應該使用執行緒狀態來同步處理執行緒的活動。

建立執行緒之後,它至少處於其中一個狀態,直到終止為止。 在 Common Language Runtime 內建立的執行緒一開始處於 Unstarted 狀態,而外部或 Unmanaged,進入執行時間的 Running 執行緒已處於狀態。 執行緒會藉由呼叫 Thread.Start ,從 Unstarted 狀態轉換成 Running 狀態。 一旦執行緒因為呼叫 Unstarted 而離開 Start狀態,它便無法再回到 Unstarted 狀態。

執行緒可以在指定時間處於多個狀態。 例如,如果在 對 的 Monitor.Wait 呼叫上封鎖執行緒,而封鎖執行緒上的另一個執行緒呼叫 Thread.Abort ,則封鎖的執行緒會同時處於 WaitSleepJoinAbortRequested 狀態。 在此情況下,只要執行緒從 呼叫 Monitor.Wait 傳回或中斷,就會收到 ThreadAbortException 開始中止的 。 並非所有值的組合 ThreadState 都有效;例如,執行緒不能同時處於 AbortedUnstarted 狀態。

執行緒永遠無法離開 Stopped 狀態。

重要

有兩個執行緒狀態列舉: System.Threading.ThreadStateSystem.Diagnostics.ThreadState

下表顯示造成狀態變更的動作。

動作 ThreadState
執行緒會在 Common Language Runtime 內建立。 Unstarted
另一個執行緒會在新的執行緒上呼叫 Thread.Start 方法,而呼叫會傳回 。

方法 Start 不會在新的執行緒開始執行之前傳回。 在 呼叫 Start 期間,沒有任何方法可以知道新執行緒將開始執行。
Running
執行緒會呼叫 Sleep WaitSleepJoin
執行緒對另一個物件呼叫 Monitor.Wait WaitSleepJoin
執行緒對另一個執行緒呼叫 Join WaitSleepJoin
另一個執行緒呼叫 Interrupt Running
另一個執行緒呼叫 Suspend SuspendRequested
執行緒回應 Suspend 要求。 Suspended
另一個執行緒呼叫 Resume Running
另一個執行緒呼叫 Abort AbortRequested
執行緒會 Abort 回應要求。 Stopped
執行緒已終止。 Stopped

除了上述狀態之外,還有 Background 狀態,指出執行緒是在背景或前景執行。 如需詳細資訊,請參閱前景與背景執行緒

Thread.ThreadState執行緒的 屬性提供執行緒的目前狀態。 應用程式必須使用位遮罩來判斷線程是否正在執行。 因為 的值 Running 是零 (0) ,所以測試執行緒是否由下列程式碼執行:

(myThread.ThreadState & (ThreadState.Stopped | ThreadState.Unstarted)) == 0
(myThread.ThreadState And (ThreadState.Stopped Or ThreadState.Unstarted)) = 0

適用於

另請參閱