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) メソッドを呼び出しますが、そのスレッドの終了を試みる保留中の 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