共用方式為


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
屬性

欄位

名稱 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 呼叫該阻塞執行緒,則該阻塞執行緒將同時處於 WaitSleepJoinAbortRequested 狀態。 在這種情況下,當執行緒從呼叫 Monitor.Wait 回來時,會立即收到開始中止的訊息 ThreadAbortException 。 並非所有值組合 ThreadState 都有效;例如,執行緒不能同時處於 和 AbortedUnstarted 狀態。

線程永遠無法離開 Stopped 該州。

這很重要

有兩個執行緒狀態列舉: System.Threading.ThreadStateSystem.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

適用於

另請參閱