ThreadState 列舉
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
指定 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
- 繼承
- 屬性
欄位
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 ,則封鎖的執行緒會同時處於 WaitSleepJoin 和 AbortRequested 狀態。 在此情況下,只要執行緒從 呼叫 Monitor.Wait 傳回或中斷,就會收到 ThreadAbortException 開始中止的 。 並非所有值的組合 ThreadState
都有效;例如,執行緒不能同時處於 Aborted 和 Unstarted 狀態。
執行緒永遠無法離開 Stopped 狀態。
重要
有兩個執行緒狀態列舉: System.Threading.ThreadState 和 System.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