ThreadStateException クラス

メソッドの呼び出しで Thread が無効な ThreadState である場合は、例外がスローされます。

この型のすべてのメンバの一覧については、ThreadStateException メンバ を参照してください。

System.Object
   System.Exception
      System.SystemException
         System.Threading.ThreadStateException

<Serializable>
Public Class ThreadStateException   Inherits SystemException
[C#]
[Serializable]
public class ThreadStateException : SystemException
[C++]
[Serializable]
public __gc class ThreadStateException : public SystemException
[JScript]
public
   Serializable
class ThreadStateException extends SystemException

スレッドセーフ

この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。

解説

スレッドは、作成されてから終了するまで少なくとも 1 つの ThreadState 状態になります。メソッドが、スレッドの現在の状態によって要求された操作が実行できない場合、 ThreadStateException をスローします。たとえば、終了したスレッドで Start を呼び出してスレッドの中断を再開しようとすると、 ThreadStateException がスローされます。

ThreadStateException は、値 0x80131520 の HRESULT COR_E_THREADSTATE を使用します。

ThreadStateException のインスタンスの初期プロパティ値の一覧については、 ThreadStateException コンストラクタのトピックを参照してください。

使用例

[Visual Basic, C#, C++] ThreadStateException がスローされる原因となるエラーの例を次に示します。

 
Imports System
Imports System.Threading

Public Class ThreadWork
   
   Public Shared Sub DoWork()
      Console.WriteLine("Working thread...")
   End Sub 'DoWork
End Class 'ThreadWork

Class ThreadStateTest
   
   Public Shared Sub Main()
      Dim myThreadDelegate As New ThreadStart(AddressOf ThreadWork.DoWork)
      Dim myThread As New Thread(myThreadDelegate)
      myThread.Start()
      Thread.Sleep(0)
      Console.WriteLine("In main. Attempting to restart myThread.")
      Try
         myThread.Start()
      Catch e As ThreadStateException
         Console.WriteLine("Caught: {0}", e.Message)
      End Try
   End Sub 'Main
End Class 'ThreadStateTest

[C#] 
using System;
using System.Threading;

public class ThreadWork 
{
public static void DoWork()
   {
   Console.WriteLine("Working thread..."); 
   }
}

class ThreadStateTest
{
public static void Main()
   {
   ThreadStart myThreadDelegate = new ThreadStart(ThreadWork.DoWork);
   Thread myThread = new Thread(myThreadDelegate);
   myThread.Start();
   Thread.Sleep(0);
   Console.WriteLine("In main. Attempting to restart myThread.");
   try 
      {
      myThread.Start();
      }
      catch(ThreadStateException e)
      {
      Console.WriteLine("Caught: {0}", e.Message);
      }
   }
}

[C++] 
#using <mscorlib.dll>

using namespace System;
using namespace System::Threading;

__gc class ThreadWork 
{
public:
    static void DoWork() 
    {
        Console::WriteLine(S"Working thread..."); 
    }
};

int main() 
{
    ThreadStart* myThreadDelegate = new ThreadStart(0, ThreadWork::DoWork);
    Thread* myThread = new Thread(myThreadDelegate);
    myThread->Start();
    Thread::Sleep(0);
    Console::WriteLine(S"In main. Attempting to restart myThread.");
    try 
    {
        myThread->Start();
    } 
    catch (ThreadStateException* e)
    {
        Console::WriteLine(S"Caught: {0}", e->Message);
    }
}

[Visual Basic, C#, C++] このコードによって、次の出力が生成されます。

In main. Attempting to restart myThread. 
    Working thread... 
    Caught: Thread is running or terminated. Cannot restart.

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

名前空間: System.Threading

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET

アセンブリ: Mscorlib (Mscorlib.dll 内)

参照

ThreadStateException メンバ | System.Threading 名前空間 | Thread | ThreadState | マネージ スレッドとアンマネージ スレッド | Exception | 例外の処理とスロー