Thread.Abort メソッド

定義

このメソッドが呼び出された対象のスレッドで、そのスレッドの終了プロセスを開始する 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

こちらもご覧ください

適用対象