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 状態です。 スレッドは、呼び出Thread.Startすことによって状態からUnstarted状態にRunning遷移します。 スレッドは、 Unstarted への呼び出しの結果として Start状態から出ると、 Unstarted 状態に戻ることはできません。

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

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

重要

2 つのスレッド状態列挙体があります。 System.Threading.ThreadState System.Diagnostics.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 (0) であるため、スレッドが次のコードで実行されているかどうかをテストします。

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

適用対象

こちらもご覧ください