ThreadState 列挙型


Thread の実行状態を指定します。Specifies the execution states of a Thread.

この列挙体には FlagsAttribute 属性があり、そのメンバー値のビットごとの組み合わせが可能になります。

public enum class ThreadState
public enum ThreadState
public enum ThreadState
public enum ThreadState
public enum ThreadState
type ThreadState = 
Public Enum ThreadState


Aborted 256

スレッド状態に AbortRequested が含まれ、そのスレッドは停止していますが、状態はまだ Stopped に変わっていません。The thread state includes AbortRequested and the thread is now dead, but its state has not yet changed to Stopped.

AbortRequested 128

スレッド上で Abort(Object) メソッドを呼び出しますが、そのスレッドの終了を試みる保留中の ThreadAbortException をスレッドが受け取っていません。The Abort(Object) method has been invoked on the thread, but the thread has not yet received the pending ThreadAbortException that will attempt to terminate it.

Background 4

スレッドは、フォアグラウンド スレッドではなく、バックグランド スレッドとして実行します。The thread is being executed as a background thread, as opposed to a foreground thread. この状態は、IsBackground プロパティを設定して制御されます。This state is controlled by setting the IsBackground property.

Running 0

スレッドは開始されており、まだ停止していません。The thread has been started and not yet stopped.

Stopped 16

スレッドを停止します。The thread has stopped.

StopRequested 1

スレッドの停止を要求します。The thread is being requested to stop. これは、内部でだけ使用します。This is for internal use only.

Suspended 64

スレッドは中断しています。The thread has been suspended.

SuspendRequested 2

スレッドの中断を要求します。The thread is being requested to suspend.

Unstarted 8

スレッド上に Start() メソッドを呼び出しません。The Start() method has not been invoked on the thread.

WaitSleepJoin 32

スレッドがブロックされています。The thread is blocked. これは、Sleep(Int32) または Join() の呼び出し、ロックの要求 (たとえば、Enter(Object)Wait(Object, Int32, Boolean) の呼び出しによる)、または ManualResetEvent などのスレッド同期オブジェクトの待機の結果である可能性があります。This could be the result of calling Sleep(Int32) or Join(), of requesting a lock - for example, by calling Enter(Object) or Wait(Object, Int32, Boolean) - or of waiting on a thread synchronization object such as ManualResetEvent.


ThreadState 列挙体は、スレッドに対して可能なすべての実行状態のセットを定義します。The ThreadState enumeration defines a set of all possible execution states for threads. これは、いくつかのデバッグシナリオでのみ重要です。It's of interest only in a few debugging scenarios. スレッドの動作を同期するために、コードでスレッドの状態を使用しないでください。Your code should never use the thread state to synchronize the activities of threads.

スレッドが作成されると、スレッドは終了するまで、少なくとも1つの状態になります。Once a thread is created, it's in at least one of the states until it terminates. 共通言語ランタイム内で作成されたスレッドは、初期状態では Unstarted 状態になりますが、外部またはアンマネージスレッドは、ランタイムに入るスレッドは既に Running 状態にあります。Threads created within the common language runtime are initially in the Unstarted state, while external, or unmanaged, threads that come into the runtime are already in the Running state. スレッドは Thread.Startを呼び出すことによって、Unstarted 状態から Running 状態に遷移します。A thread is transitioned from the Unstarted state into the Running state by calling Thread.Start. スレッドは、 Unstarted への呼び出しの結果として Start状態から出ると、 Unstarted 状態に戻ることはできません。Once a thread leaves the Unstarted state as the result of a call to Start, it can never return to the Unstarted state.

スレッドは、特定の時点で複数の状態になることがあります。A thread can be in more than one state at a given time. たとえば、Monitor.Waitへの呼び出しでスレッドがブロックされ、別のスレッドがブロックされたスレッドで Thread.Abort を呼び出すと、ブロックされたスレッドは同時に WaitSleepJoinAbortRequested の両方の状態になります。For example, if a thread is blocked on a call to Monitor.Wait, and another thread calls Thread.Abort on the blocked thread, the blocked thread will be in both the WaitSleepJoin and AbortRequested states at the same time. この場合、スレッドが Monitor.Wait への呼び出しから戻るか、中断されるとすぐに、中止を開始する ThreadAbortException が返されます。In this case, as soon as the thread returns from the call to Monitor.Wait or is interrupted, it will receive the ThreadAbortException to begin aborting. ThreadState 値のすべての組み合わせが有効であるとは限りません。たとえば、スレッドを AbortedUnstarted の両方の状態にすることはできません。Not all combinations of ThreadState values are valid; for example, a thread cannot be in both the Aborted and Unstarted states.

また、スレッドは Stopped 状態から出ることはできません。A thread can never leave the Stopped state.


スレッド状態の列挙体には、System.Threading.ThreadStateSystem.Diagnostics.ThreadStateの2つがあります。There are two thread state enumerations: System.Threading.ThreadState and System.Diagnostics.ThreadState.

次の表に、状態の変更を引き起こすアクションを示します。The following table shows the actions that cause a change of state.

操作Action ThreadStateThreadState
スレッドは、共通言語ランタイム内で作成されます。A thread is created within the common language runtime. Unstarted
別のスレッドが新しいスレッドで Thread.Start メソッドを呼び出すと、呼び出しはを返します。Another thread calls the Thread.Start method on the new thread, and the call returns.

Start メソッドは、新しいスレッドが実行を開始するまでは戻りません。The Start method does not return until the new thread has started running. Startの呼び出し中に、新しいスレッドがどの時点で実行を開始するかを知る方法はありません。There is no way to know at what point the new thread will start running, during the call to Start.
スレッドはを呼び出し SleepThe thread calls Sleep WaitSleepJoin
スレッドが別のオブジェクトで Monitor.Wait を呼び出す。The thread calls Monitor.Wait on another object. WaitSleepJoin
スレッドが別のスレッドで Join を呼び出す。The thread calls Join on another thread. WaitSleepJoin
別のスレッドがを呼び出す InterruptAnother thread calls Interrupt Running
別のスレッドがを呼び出す SuspendAnother thread calls Suspend SuspendRequested
スレッドが Suspend 要求に応答する。The thread responds to a Suspend request. Suspended
別のスレッドがを呼び出す ResumeAnother thread calls Resume Running
別のスレッドがを呼び出す AbortAnother thread calls Abort AbortRequested
スレッドが Abort 要求に応答します。The thread responds to an Abort request. Stopped
スレッドが終了しました。A thread is terminated. Stopped

上記の状態に加えて、スレッドがバックグラウンドとフォアグラウンドのどちらで実行されているかを示す Background 状態もあります。In addition to the states noted above, there is also the Background state, which indicates whether the thread is running in the background or foreground. 詳細については、「フォアグラウンド スレッドとバックグラウンド スレッド」を参照してください。For more information, see Foreground and Background Threads.

スレッドの Thread.ThreadState プロパティは、スレッドの現在の状態を提供します。The Thread.ThreadState property of a thread provides the current state of a thread. アプリケーションは、スレッドが実行されているかどうかを判断するためにビットマスクを使用する必要があります。Applications must use a bit mask to determine whether a thread is running. Running の値がゼロ (0) であるため、スレッドが次のコードで実行されているかどうかをテストします。Since the value for Running is zero (0), test whether a thread is running by the following code:

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