次の方法で共有


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

フィールド

名前 説明
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 場合、ブロックされたスレッドは同時に WaitSleepJoinAbortRequested の両方の状態になります。 この場合、スレッドは、 Monitor.Wait の呼び出しから戻るか、中断されるとすぐに、中止を開始する ThreadAbortException を受け取ります。 ThreadState値のすべての組み合わせが有効なわけではありません。たとえば、スレッドをAborted状態とUnstarted状態の両方にすることはできません。

スレッドが Stopped 状態を離れることは決してありません。

Important

スレッド状態列挙には、 System.Threading.ThreadStateSystem.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

適用対象

こちらもご覧ください