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) メソッドを呼び出しますが、そのスレッドの終了を試みる保留中の 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 、スレッドに対して可能なすべての実行状態のセットを定義します。 これは、いくつかのデバッグ シナリオでのみ重要です。 コードでスレッドの状態を使用してスレッドのアクティビティを同期しないでください。

スレッドが作成されると、終了するまでは少なくとも 1 つの状態になります。 共通言語ランタイム内で作成されたスレッドは、最初は状態ですが Unstarted 、ランタイムに入ってくる外部スレッドまたはアンマネージド スレッドは既に Running 状態です。 スレッドは、 をUnstarted呼び出Thread.Startして状態から状態にRunning遷移します。 スレッドは、 Unstarted への呼び出しの結果として Start状態から出ると、 Unstarted 状態に戻ることはできません。

スレッドは、一度に複数の状態にすることができます。 たとえば、 のMonitor.Wait呼び出しでスレッドがブロックされ、ブロックされたスレッドで別のスレッドが呼び出Thread.Abortされた場合、ブロックされたスレッドは 同時に と AbortRequested の両方WaitSleepJoinの状態になります。 この場合、スレッドが または の Monitor.Wait 呼び出しから戻るとすぐに、 を受信 ThreadAbortException して中止を開始します。 値のすべての組み合わせThreadStateが有効なわけではありません。たとえば、スレッドを と Unstarted の両方Abortedの状態にすることはできません。

また、スレッドは Stopped 状態から出ることはできません。

重要

スレッド状態の列挙には、 と System.Diagnostics.ThreadStateの 2 つがありますSystem.Threading.ThreadState

次の表は、状態の変化を引き起こすアクションを示しています。

操作 ThreadState
共通言語ランタイム内にスレッドが作成されます。 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

適用対象

こちらもご覧ください