Thread.Abort メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
このメソッドが呼び出された対象のスレッドで、そのスレッドの終了プロセスを開始する ThreadAbortException を発生させます。 このメソッドを呼び出すと、通常、スレッドが終了します。
オーバーロード
Abort() |
互換性のために残されています。
このメソッドが呼び出された対象のスレッドで、そのスレッドの終了プロセスを開始する ThreadAbortException を発生させます。 このメソッドを呼び出すと、通常、スレッドが終了します。 |
Abort(Object) |
互換性のために残されています。
このメソッドが呼び出された対象のスレッドで、スレッドの終了プロセスを開始する ThreadAbortException を発生させます。またスレッドの終了に関する例外情報も提供します。 このメソッドを呼び出すと、通常、スレッドが終了します。 |
注釈
重要
メソッド Thread.Abort
は注意して使用する必要があります。 特に、現在のスレッド以外のスレッドを中止するために呼び出す場合は、 がスローされた場合に実行または実行に失敗したコード ThreadAbortException がわかりません。 また、アプリケーションの状態や、アプリケーションとユーザーの状態を保持する責任を持つものにすることはできません。 たとえば、 を呼び出すことによって、静的コンストラクターの実行やアンマネージ リソース Thread.Abort
の解放が妨げる可能性があります。
Abort()
注意事項
Thread.Abort is not supported and throws PlatformNotSupportedException.
このメソッドが呼び出された対象のスレッドで、そのスレッドの終了プロセスを開始する ThreadAbortException を発生させます。 このメソッドを呼び出すと、通常、スレッドが終了します。
public:
void Abort();
[System.Obsolete("Thread.Abort is not supported and throws PlatformNotSupportedException.", DiagnosticId="SYSLIB0006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public void Abort ();
public void Abort ();
[<System.Obsolete("Thread.Abort is not supported and throws PlatformNotSupportedException.", DiagnosticId="SYSLIB0006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
member this.Abort : unit -> unit
member this.Abort : unit -> unit
Public Sub Abort ()
- 属性
例外
.NET Core および .NET 5 以降のみ:すべての場合。
呼び出し元に、必要なアクセス許可がありません。
中止しようとしているスレッドが現在中断されています。
注釈
このメソッドは、互換性のために残されています。 .NET 5 以降のバージョンでは、このメソッドを呼び出してコンパイル時の警告が生成されます。 このメソッドは、実行時に .NET 5 以降および .NET Core で PlatformNotSupportedException をスローします。
このメソッドがスレッドで呼び出されると、システムはスレッド内の をスローして ThreadAbortException 中止します。 ThreadAbortException
は、アプリケーション コードでキャッチできる特別な例外ですが、 が呼び出されていない限り、 ブロックの末尾 catch
ResetAbort に再スローされます。 ResetAbort
は中止する要求を取り消し、 が ThreadAbortException
スレッドを終了するのを防ぐ。 実行されていないブロックは finally
、スレッドが中止される前に実行されます。
注意
スレッドがそれ自体を呼び出す場合、効果は例外をスローするのと似ています。 はすぐに発生し、結果 Abort
ThreadAbortException は予測可能です。 ただし、あるスレッドが別のスレッド Abort
で を呼び出した場合、中止は実行中のコードを中断します。 静的コンストラクターが中止される可能性があります。 まれに、そのクラスのインスタンスがアプリケーション ドメインに作成されるのを妨げる場合があります。 .NET Framework バージョン 1.0 および 1.1 では、ブロックの実行中にスレッドが中止される可能性があります。その場合、ブロックは中止 finally
finally
されます。
スレッドがすぐに中止される、または一切中止されない。 この状況は、中止プロシージャの一部として呼び出されるブロックでスレッドが無制限の量の計算を実行し、それによって中止を無期限に遅延する場合に発生する可能性 finally
があります。 スレッドが中止されるまで待機するには、 メソッドを呼び出した後にスレッドで メソッドを呼び出しますが、待機が終了 Join Abort する保証はありません。
注意
中止されるスレッドが、ブロック、ブロック、制約付き実行領域などのコードの保護された領域にある場合、を呼び出すスレッドは Abort catch
ブロックする finally
可能性があります。 を呼び出すスレッドが、中止されたスレッドに必要なロックを保持 Abort している場合、デッドロックが発生する可能性があります。
が開始されていないスレッドで が呼び出された場合、 が呼び出された場合、スレッド Abort
Start は中止されます。 ブロックまたはスリープ状態のスレッドで が呼び出された場合、スレッドは中断され Abort
、中止されます。
中断されたスレッドで が呼び出された場合は、 を呼び出したスレッドで がスローされ、中止されるスレッドの プロパティ Abort
ThreadStateException Abort AbortRequested ThreadState に追加されます。 が ThreadAbortException 呼び出されるまで、中断されたスレッドで Resume がスローされません。
アンマネージ コードの実行中にマネージド スレッドで が呼び出された場合、スレッドがマネージド コードに戻るまで、 は Abort
ThreadAbortException
スローされません。
2 つの呼び出しが同時に行う場合は、1 つの呼び出しで状態情報を設定し、もう 1 つの呼び出しで を実行 Abort
することができます Abort
。 ただし、アプリケーションではこの状況を検出できません。
スレッド Abort
で が呼び出されると、スレッドの状態に が含まれます AbortRequested 。 への正常な呼び出しの結果としてスレッドが終了すると、スレッドの状態 Abort
が に変更されます Stopped 。 十分なアクセス許可を持つ場合、 のターゲットであるスレッドは、 メソッドを使用 Abort
して中止を取り消 ResetAbort
す可能性があります。 メソッドの呼び出しの例については ResetAbort
、 クラスを参照 ThreadAbortException
してください。
こちらもご覧ください
適用対象
Abort(Object)
注意事項
Thread.Abort is not supported and throws PlatformNotSupportedException.
このメソッドが呼び出された対象のスレッドで、スレッドの終了プロセスを開始する ThreadAbortException を発生させます。またスレッドの終了に関する例外情報も提供します。 このメソッドを呼び出すと、通常、スレッドが終了します。
public:
void Abort(System::Object ^ stateInfo);
[System.Obsolete("Thread.Abort is not supported and throws PlatformNotSupportedException.", DiagnosticId="SYSLIB0006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public void Abort (object? stateInfo);
public void Abort (object stateInfo);
public void Abort (object? stateInfo);
[<System.Obsolete("Thread.Abort is not supported and throws PlatformNotSupportedException.", DiagnosticId="SYSLIB0006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
member this.Abort : obj -> unit
member this.Abort : obj -> unit
Public Sub Abort (stateInfo As Object)
パラメーター
- stateInfo
- Object
中止するスレッドで使用できる、状態などのアプリケーション固有の情報を格納するオブジェクト。
- 属性
例外
.NET Core および .NET 5 以降のみ:すべての場合。
呼び出し元に、必要なアクセス許可がありません。
中止しようとしているスレッドが現在中断されています。
例
次のコード例は、中断されているスレッドに情報を渡す方法を示しています。
using namespace System;
using namespace System::Threading;
ref class Test
{
private:
Test(){}
public:
static void TestMethod()
{
try
{
while ( true )
{
Console::WriteLine( "New thread running." );
Thread::Sleep( 1000 );
}
}
catch ( ThreadAbortException^ abortException )
{
Console::WriteLine( dynamic_cast<String^>(abortException->ExceptionState) );
}
}
};
int main()
{
Thread^ newThread = gcnew Thread( gcnew ThreadStart( &Test::TestMethod ) );
newThread->Start();
Thread::Sleep( 1000 );
// Abort newThread.
Console::WriteLine( "Main aborting new thread." );
newThread->Abort( "Information from main." );
// Wait for the thread to terminate.
newThread->Join();
Console::WriteLine( "New thread terminated - main exiting." );
}
using System;
using System.Threading;
class Test
{
public static void Main()
{
Thread newThread = new Thread(new ThreadStart(TestMethod));
newThread.Start();
Thread.Sleep(1000);
// Abort newThread.
Console.WriteLine("Main aborting new thread.");
newThread.Abort("Information from Main.");
// Wait for the thread to terminate.
newThread.Join();
Console.WriteLine("New thread terminated - Main exiting.");
}
static void TestMethod()
{
try
{
while(true)
{
Console.WriteLine("New thread running.");
Thread.Sleep(1000);
}
}
catch(ThreadAbortException abortException)
{
Console.WriteLine((string)abortException.ExceptionState);
}
}
}
Imports System.Threading
Public Class Test
<MTAThread> _
Shared Sub Main()
Dim newThread As New Thread(AddressOf TestMethod)
newThread.Start()
Thread.Sleep(1000)
' Abort newThread.
Console.WriteLine("Main aborting new thread.")
newThread.Abort("Information from Main.")
' Wait for the thread to terminate.
newThread.Join()
Console.WriteLine("New thread terminated - Main exiting.")
End Sub
Shared Sub TestMethod()
Try
While True
Console.WriteLine("New thread running.")
Thread.Sleep(1000)
End While
Catch abortException As ThreadAbortException
Console.WriteLine( _
CType(abortException.ExceptionState, String))
End Try
End Sub
End Class
注釈
このメソッドは、互換性のために残されています。 .NET 5 以降のバージョンでは、このメソッドを呼び出すと、コンパイル時の警告が生成されます。 このメソッドは、 PlatformNotSupportedException 実行時に .net 5 以降および .Net Core でをスローします。
このメソッドがスレッドで呼び出されると、システムはスレッドでをスローし ThreadAbortException て中止します。 ThreadAbortException
は、アプリケーションコードでキャッチできる特殊な例外ですが、が呼び出されない限り、ブロックの末尾で再スローされ catch
ResetAbort ます。 ResetAbort
中止要求をキャンセルし、がスレッドを終了できないようにし ThreadAbortException
ます。 Unexecuted finally
ブロックは、スレッドが中止される前に実行されます。
注意
スレッドがそれ自体でを呼び出すと、 Abort
その効果は例外をスローするのと似ています。はすぐに発生し、 ThreadAbortException 結果は予測可能です。 ただし、あるスレッドが別のスレッドでを呼び出すと、 Abort
実行中のすべてのコードが中断されます。 静的コンストラクターが中断される可能性があります。 まれに、そのクラスのインスタンスがそのアプリケーションドメインで作成されない場合があります。 .NET Framework バージョン1.0 および1.1 では、ブロックが実行されている間にスレッドが中止される可能性があり finally
ます。この場合、 finally
ブロックは中止されます。
スレッドはすぐに中止されるとは限りません。 この状況は、スレッドが finally
中止プロシージャの一部として呼び出されたブロック内で無制限の計算を実行した場合に発生する可能性があります。これにより、中止が無期限に遅延されます。 スレッドが中止されるまで待機するには、メソッドを呼び出した後にスレッドでメソッドを呼び出すことができ Join Abort ますが、待機が終了する保証はありません。
注意
Abort中断されているスレッドが、 catch
ブロック、 finally
ブロック、または制約された実行領域などのコードの保護された領域内にある場合は、を呼び出すスレッドがブロックされる可能性があります。 を呼び出したスレッドが、中止されたスレッドが必要とするロックを保持している場合 Abort 、デッドロックが発生する可能性があります。
が Abort
開始されていないスレッドでが呼び出された場合、スレッドはが呼び出されると中止され Start ます。 ブロックされている、またはスリープ状態の Abort
スレッドでが呼び出された場合、スレッドは中断されてから中止されます。
Abort
中断されたスレッドでが呼び出されると、が呼び出されたスレッドでがスローされ、 ThreadStateException Abort 中止されるスレッド AbortRequested のプロパティにが追加され ThreadState ます。 ThreadAbortExceptionが呼び出されるまで、中断されたスレッドではスローされません Resume 。
Abort
アンマネージコードの実行中にマネージスレッドでが呼び出された場合、 ThreadAbortException
スレッドがマネージコードに戻るまでは、がスローされません。
2つの呼び出しが同時に行わ Abort
れる場合は、1回の呼び出しで状態情報を設定し、もう一方の呼び出しでを実行することができ Abort
ます。 ただし、アプリケーションでこの状況を検出することはできません。
Abort
スレッドでが呼び出された後、スレッドの状態にはが含まれ AbortRequested ます。 の呼び出しが成功した結果としてスレッドが終了すると Abort
、スレッドの状態がに変更され Stopped ます。 十分なアクセス許可がある場合、のターゲットであるスレッドは、 Abort
メソッドを使用して中止を取り消すことができ ResetAbort
ます。 メソッドの呼び出しを示す例につい ResetAbort
ては、クラスを参照してください ThreadAbortException
。