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
- 継承
- 属性
フィールド
| 名前 | 値 | 説明 |
|---|---|---|
| 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列挙は、スレッドに対して可能なすべての実行状態のセットを定義します。 これは、いくつかのデバッグ シナリオでのみ重要です。 コードでスレッドの状態を使用してスレッドのアクティビティを同期しないでください。
スレッドが作成されると、終了するまで少なくとも 1 つの状態になります。 共通言語ランタイム内で作成されたスレッドは、最初は Unstarted 状態ですが、ランタイムに入ってくる外部スレッドまたはアンマネージド スレッドは既に Running 状態です。 スレッドは、Thread.Startを呼び出すことによって、Unstarted状態からRunning状態に遷移します。 スレッドがStartの呼び出しの結果としてUnstarted状態を離れると、Unstarted状態に戻ることはありません。
スレッドは、特定の時点で複数の状態にすることができます。 たとえば、 Monitor.Waitの呼び出しでスレッドがブロックされ、ブロックされたスレッドで別のスレッド呼び出しが Thread.Abort 場合、ブロックされたスレッドは同時に WaitSleepJoin と AbortRequested の両方の状態になります。 この場合、スレッドは、 Monitor.Wait の呼び出しから戻るか、中断されるとすぐに、中止を開始する ThreadAbortException を受け取ります。
ThreadState値のすべての組み合わせが有効なわけではありません。たとえば、スレッドをAborted状態とUnstarted状態の両方にすることはできません。
スレッドが Stopped 状態を離れることは決してありません。
Important
スレッド状態列挙には、 System.Threading.ThreadState と System.Diagnostics.ThreadStateの 2 つがあります。
次の表は、状態の変化を引き起こすアクションを示しています。
| アクション | 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