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 | 例外の処理とスロー