ThreadState ThreadState ThreadState ThreadState Enum


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

この列挙型には FlagsAttribute 属性があり、メンバー値ではビットごとの組み合わせを使用できます。

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


Aborted Aborted Aborted 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 AbortRequested AbortRequested 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 Background Background 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 Running Running Running 0

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

Stopped Stopped Stopped Stopped 16

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

StopRequested StopRequested StopRequested StopRequested 1

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

Suspended Suspended Suspended Suspended 64

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

SuspendRequested SuspendRequested SuspendRequested SuspendRequested 2

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

Unstarted Unstarted Unstarted Unstarted 8

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

WaitSleepJoin WaitSleepJoin WaitSleepJoin 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. を呼び出すUnstarted Running ことによって、スレッドが状態から状態にThread.Start遷移します。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場合、ブロックさWaitSleepJoinれたスレッドAbortRequestedはとの両方の状態になります。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.ThreadStateには、とSystem.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