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両方であるが、ブロックされたスレッドでは、ブロックされたスレッド、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.


2 つのスレッドの状態の列挙型がある:System.Threading.ThreadStateSystem.Diagnostics.ThreadStateします。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