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
- 繼承
- 屬性
欄位
| 名稱 | 值 | Description |
|---|---|---|
| Running | 0 | 討論串已經開始了,但還沒停止。 |
| StopRequested | 1 | 該討論串被要求停止。 這是僅供內部使用。 |
| SuspendRequested | 2 | 該討論串被請求暫停。 |
| Background | 4 | 執行緒是以背景執行緒執行,而非前景執行緒。 這個狀態是透過設定 IsBackground 屬性來控制的。 |
| Unstarted | 8 | Start()該方法尚未在討論串中被啟用。 |
| Stopped | 16 | 討論串已經停止了。 |
| WaitSleepJoin | 32 | 討論串被封鎖了。 這可能是 Sleep(Int32) 呼叫或 Join(),請求鎖(例如呼叫 Enter(Object) 或 Wait(Object, Int32, Boolean) ),或是等待執行緒同步物件(如 ManualResetEvent)。 |
| Suspended | 64 | 該線程已被暫停。 |
| AbortRequested | 128 | Abort(Object)該方法已在執行緒中被呼叫,但執行緒尚未收到將嘗試終止該方法的待處理ThreadAbortException。 |
| Aborted | 256 | 執行緒狀態包含 AbortRequested 且執行緒已死,但其狀態尚未改變為 Stopped。 |
備註
列 ThreadState 舉定義了執行緒所有可能執行狀態的集合。 它只在少數除錯情境中有趣。 你的程式碼絕不應該用執行緒狀態來同步執行緒的活動。
一旦建立執行緒,它至少會處於其中一個狀態,直到終止。 在共通語言執行環境中建立的執行緒最初處於狀態 Unstarted ,而外部或未受管理的執行緒進入執行階段時,則已處於該 Running 狀態。 執行緒從 Unstarted 狀態轉換到狀態 Running 時,會呼叫 Thread.Start。 一旦執行緒因呼叫 Start而離開Unstarted該狀態,就永遠無法回到該Unstarted狀態。
一個執行緒可以同時處於多個狀態。 例如,若一個執行緒在呼叫 Monitor.Wait時被阻塞,而另一個執行緒 Thread.Abort 呼叫該阻塞執行緒,則該阻塞執行緒將同時處於 WaitSleepJoin 和 AbortRequested 狀態。 在這種情況下,當執行緒從呼叫 Monitor.Wait 回來時,會立即收到開始中止的訊息 ThreadAbortException 。 並非所有值組合 ThreadState 都有效;例如,執行緒不能同時處於 和 AbortedUnstarted 狀態。
線程永遠無法離開 Stopped 該州。
這很重要
有兩個執行緒狀態列舉: System.Threading.ThreadState 和 System.Diagnostics.ThreadState。
下表顯示導致狀態變更的動作。
| Action | 線程狀態 |
|---|---|
| 執行緒是在通用語言執行環境中建立的。 | 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