更新 : 2007 年 11 月
ThreadState プロパティは、スレッドのステータスに関する情報を提供します。スレッドは複数の状態を持つことがあるため、ThreadState に格納されている値は ThreadState 列挙型の値の組み合わせの場合があります。たとえば、スレッドが Wait の呼び出しからブロックされ、別のスレッドが同じスレッドで Abort メソッドを呼び出した場合、スレッドは同時に WaitSleepJoin 状態と AbortRequested 状態になります。
スレッドの状態の変更
スレッドの開始後に、スレッドのメソッドを呼び出してその状態を変更できます。たとえば、Thread.Sleep を呼び出して、スレッドをミリ秒単位で一定の時間だけ一時中断できます。Sleep メソッドは、パラメータとしてタイムアウトを受け取ります。これはスレッドをブロックされた状態にする数値で、単位はミリ秒です。
引数 Infinite で Sleep を呼び出すと、スレッドは、Interrupt を呼び出した別のスレッドに割り込まれるまで、スリープ状態になります。Interrupt メソッドは、指定のスレッドの待機状態を解除し、例外を生成します。
また、Suspend を呼び出すと、スレッドを一時中断することもできます。スレッドがそれ自身に Suspend を呼び出すと、その呼び出しは、別のスレッドが Resume を呼び出してそのスレッドを再開するまでそのスレッドをブロックします。スレッドが別のスレッドで Suspend を呼び出した場合、その呼び出しは非ブロッキング呼び出しであり、この呼び出しによって他のスレッドは一時中断されます。Resume を呼び出すと、別のスレッドの中断状態が終了し、実行が再開されます。Sleep とは異なり、Suspend はスレッドをすぐには停止しません。中断されたスレッドは、共通言語ランタイムによって安全なポイントに達したと判断されるまでは一時停止しません。
Abort メソッドは、スレッドを終了させる ThreadAbortException 例外を発生させることにより、実行中のスレッドを停止します。
これらのメソッドの詳細については、「Thread」を参照してください。