Thread.Abort メソッド

定義

このメソッドが呼び出された対象のスレッドで、そのスレッドの終了プロセスを開始する ThreadAbortException を発生させます。Raises a ThreadAbortException in the thread on which it is invoked, to begin the process of terminating the thread. このメソッドを呼び出すと、通常、スレッドが終了します。Calling this method usually terminates the thread.

オーバーロード

Abort()

このメソッドが呼び出された対象のスレッドで、そのスレッドの終了プロセスを開始する ThreadAbortException を発生させます。Raises a ThreadAbortException in the thread on which it is invoked, to begin the process of terminating the thread. このメソッドを呼び出すと、通常、スレッドが終了します。Calling this method usually terminates the thread.

Abort(Object)

このメソッドが呼び出された対象のスレッドで、スレッドの終了プロセスを開始する ThreadAbortException を発生させます。またスレッドの終了に関する例外情報も提供します。Raises a ThreadAbortException in the thread on which it is invoked, to begin the process of terminating the thread while also providing exception information about the thread termination. このメソッドを呼び出すと、通常、スレッドが終了します。Calling this method usually terminates the thread.

注釈

重要

Thread.Abort メソッドは注意して使用する必要があります。The Thread.Abort method should be used with caution. 特に、このメソッドを呼び出して、現在のスレッド以外のスレッドを中止すると、ThreadAbortException がスローされたときに実行されたコードや実行に失敗したコードがわからなくなります。また、アプリケーションの状態やアプリケーションとユーザーの状態が保持されているかどうかを特定できません。Particularly when you call it to abort a thread other than the current thread, you do not know what code has executed or failed to execute when the ThreadAbortException is thrown, nor can you be certain of the state of your application or any application and user state that it is responsible for preserving. たとえば、Thread.Abort を呼び出すと、静的コンストラクターがアンマネージリソースの解放を実行したり、解放したりするのを防ぐことができます。For example, calling Thread.Abort may prevent static constructors from executing or prevent the release of unmanaged resources

Abort()

このメソッドが呼び出された対象のスレッドで、そのスレッドの終了プロセスを開始する ThreadAbortException を発生させます。Raises a ThreadAbortException in the thread on which it is invoked, to begin the process of terminating the thread. このメソッドを呼び出すと、通常、スレッドが終了します。Calling this method usually terminates the thread.

public:
 void Abort();
public void Abort ();
member this.Abort : unit -> unit
Public Sub Abort ()

例外

.NET Core のみ: このメンバーはサポートされていません。.NET Core only: This member is not supported.

呼び出し元に、必要なアクセス許可がありません。The caller does not have the required permission.

中止しようとしているスレッドが現在中断されています。The thread that is being aborted is currently suspended.

注釈

このメソッドがスレッドで呼び出されると、システムはスレッド内の ThreadAbortException をスローして中止します。When this method is invoked on a thread, the system throws a ThreadAbortException in the thread to abort it. ThreadAbortException は、アプリケーションコードでキャッチできる特殊な例外ですが、ResetAbort が呼び出されない限り、catch ブロックの最後に再スローされます。ThreadAbortException is a special exception that can be caught by application code, but is re-thrown at the end of the catch block unless ResetAbort is called. ResetAbort は、中止の要求をキャンセルし、ThreadAbortException がスレッドを終了できないようにします。ResetAbort cancels the request to abort, and prevents the ThreadAbortException from terminating the thread. Unexecuted finally ブロックは、スレッドが中止される前に実行されます。Unexecuted finally blocks are executed before the thread is aborted.

注意

スレッドがそれ自体で Abort を呼び出すと、その効果は例外をスローするのと似ています。ThreadAbortException が直ちに発生し、結果は予測可能です。When a thread calls Abort on itself, the effect is similar to throwing an exception; the ThreadAbortException happens immediately, and the result is predictable. ただし、あるスレッドが別のスレッドで Abort を呼び出した場合、abort は実行されているすべてのコードを中断します。However, if one thread calls Abort on another thread, the abort interrupts whatever code is running. また、静的コンストラクターが中断される可能性もあります。There is also a chance that a static constructor could be aborted. まれに、そのクラスのインスタンスがそのアプリケーションドメインで作成されない場合があります。In rare cases, this might prevent instances of that class from being created in that application domain. .NET Framework バージョン1.0 および1.1 では、finally ブロックの実行中にスレッドが中止される可能性があります。この場合、finally ブロックは中止されます。In the .NET Framework versions 1.0 and 1.1, there is a chance the thread could abort while a finally block is running, in which case the finally block is aborted.

スレッドはすぐに中止されるとは限りません。The thread is not guaranteed to abort immediately, or at all. この状況は、スレッドが中止プロシージャの一部として呼び出された finally ブロックで無制限の計算を実行した場合に発生する可能性があります。これにより、中止が無期限に遅延されます。This situation can occur if a thread does an unbounded amount of computation in the finally blocks that are called as part of the abort procedure, thereby indefinitely delaying the abort. スレッドが中止されるまで待機するには、Abort メソッドを呼び出した後にスレッドで Join メソッドを呼び出すことができますが、待機が終了する保証はありません。To wait until a thread has aborted, you can call the Join method on the thread after calling the Abort method, but there is no guarantee the wait will end.

注意

中断されているスレッドが、catch ブロック、finally ブロック、または制約された実行領域などのコードの保護された領域内にある場合、Abort を呼び出すスレッドがブロックする可能性があります。The thread that calls Abort might block if the thread that is being aborted is in a protected region of code, such as a catch block, finally block, or constrained execution region. Abort を呼び出すスレッドが、中止されたスレッドが必要とするロックを保持している場合、デッドロックが発生する可能性があります。If the thread that calls Abort holds a lock that the aborted thread requires, a deadlock can occur.

開始されていないスレッドで Abort が呼び出されると、Start が呼び出されたときにスレッドが中止されます。If Abort is called on a thread that has not been started, the thread will abort when Start is called. ブロックされている、またはスリープ状態のスレッドで Abort が呼び出された場合、スレッドは中断されてから中止されます。If Abort is called on a thread that is blocked or is sleeping, the thread is interrupted and then aborted.

中断されたスレッドで Abort が呼び出されると、Abortを呼び出したスレッドで ThreadStateException がスローされ、中止されるスレッドの ThreadState プロパティに AbortRequested が追加されます。If Abort is called on a thread that has been suspended, a ThreadStateException is thrown in the thread that called Abort, and AbortRequested is added to the ThreadState property of the thread being aborted. Resume が呼び出されるまで、ThreadAbortException は中断されたスレッドでスローされません。A ThreadAbortException is not thrown in the suspended thread until Resume is called.

アンマネージコードの実行中にマネージスレッドで Abort が呼び出された場合、そのスレッドがマネージコードに戻るまで、ThreadAbortException はスローされません。If Abort is called on a managed thread while it is executing unmanaged code, a ThreadAbortException is not thrown until the thread returns to managed code.

Abort の2回の呼び出しが同時に発生した場合、1回の呼び出しで状態情報を設定し、もう一方の呼び出しで Abortを実行することができます。If two calls to Abort come at the same time, it is possible for one call to set the state information and the other call to execute the Abort. ただし、アプリケーションでこの状況を検出することはできません。However, an application cannot detect this situation.

スレッドで Abort が呼び出されると、スレッドの状態に AbortRequestedが含まれます。After Abort is invoked on a thread, the state of the thread includes AbortRequested. Abortの呼び出しが成功した結果としてスレッドが終了すると、スレッドの状態が Stoppedに変更されます。After the thread has terminated as a result of a successful call to Abort, the state of the thread is changed to Stopped. 十分な権限を持っている場合、Abort のターゲットであるスレッドは、ResetAbort メソッドを使用して中止を取り消すことができます。With sufficient permissions, a thread that is the target of an Abort can cancel the abort using the ResetAbort method. ResetAbort メソッドの呼び出しを示す例については、ThreadAbortException クラスを参照してください。For an example that demonstrates calling the ResetAbort method, see the ThreadAbortException class.

セキュリティ

SecurityPermission
スレッドに対する高度な操作の場合。for advanced operations on threads. ControlThread (関連する列挙体)Associated enumeration: ControlThread.

こちらもご覧ください

Abort(Object)

このメソッドが呼び出された対象のスレッドで、スレッドの終了プロセスを開始する ThreadAbortException を発生させます。またスレッドの終了に関する例外情報も提供します。Raises a ThreadAbortException in the thread on which it is invoked, to begin the process of terminating the thread while also providing exception information about the thread termination. このメソッドを呼び出すと、通常、スレッドが終了します。Calling this method usually terminates the thread.

public:
 void Abort(System::Object ^ stateInfo);
public void Abort (object stateInfo);
member this.Abort : obj -> unit
Public Sub Abort (stateInfo As Object)

パラメーター

stateInfo
Object

中止するスレッドで使用できる、状態などのアプリケーション固有の情報を格納するオブジェクト。An object that contains application-specific information, such as state, which can be used by the thread being aborted.

例外

.NET Core のみ: このメンバーはサポートされていません。.NET Core only: This member is not supported.

呼び出し元に、必要なアクセス許可がありません。The caller does not have the required permission.

中止しようとしているスレッドが現在中断されています。The thread that is being aborted is currently suspended.

次のコード例は、中断されているスレッドに情報を渡す方法を示しています。The following code example shows how to pass information to a thread that is being aborted.

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

注釈

このメソッドがスレッドで呼び出されると、システムはスレッド内の ThreadAbortException をスローして中止します。When this method is invoked on a thread, the system throws a ThreadAbortException in the thread to abort it. ThreadAbortException は、アプリケーションコードでキャッチできる特殊な例外ですが、ResetAbort が呼び出されない限り、catch ブロックの最後に再スローされます。ThreadAbortException is a special exception that can be caught by application code, but is re-thrown at the end of the catch block unless ResetAbort is called. ResetAbort は、中止の要求をキャンセルし、ThreadAbortException がスレッドを終了できないようにします。ResetAbort cancels the request to abort, and prevents the ThreadAbortException from terminating the thread. Unexecuted finally ブロックは、スレッドが中止される前に実行されます。Unexecuted finally blocks are executed before the thread is aborted.

注意

スレッドがそれ自体で Abort を呼び出すと、その効果は例外をスローするのと似ています。ThreadAbortException が直ちに発生し、結果は予測可能です。When a thread calls Abort on itself, the effect is similar to throwing an exception; the ThreadAbortException happens immediately, and the result is predictable. ただし、あるスレッドが別のスレッドで Abort を呼び出した場合、abort は実行されているすべてのコードを中断します。However, if one thread calls Abort on another thread, the abort interrupts whatever code is running. 静的コンストラクターが中断される可能性があります。There is a chance that a static constructor could be aborted. まれに、そのクラスのインスタンスがそのアプリケーションドメインで作成されない場合があります。In rare cases, this might prevent instances of that class from being created in that application domain. .NET Framework バージョン1.0 および1.1 では、finally ブロックの実行中にスレッドが中止される可能性があります。この場合、finally ブロックは中止されます。In the .NET Framework versions 1.0 and 1.1, there is a chance the thread could abort while a finally block is running, in which case the finally block is aborted.

スレッドはすぐに中止されるとは限りません。The thread is not guaranteed to abort immediately, or at all. この状況は、スレッドが中止プロシージャの一部として呼び出された finally ブロックで無制限の計算を実行した場合に発生する可能性があります。これにより、中止が無期限に遅延されます。This situation can occur if a thread does an unbounded amount of computation in the finally blocks that are called as part of the abort procedure, thereby indefinitely delaying the abort. スレッドが中止されるまで待機するには、Abort メソッドを呼び出した後にスレッドで Join メソッドを呼び出すことができますが、待機が終了する保証はありません。To wait until a thread has aborted, you can call the Join method on the thread after calling the Abort method, but there is no guarantee that the wait will end.

注意

中断されているスレッドが、catch ブロック、finally ブロック、または制約された実行領域などのコードの保護された領域内にある場合、Abort を呼び出すスレッドがブロックする可能性があります。The thread that calls Abort might block if the thread that is being aborted is in a protected region of code, such as a catch block, finally block, or constrained execution region. Abort を呼び出すスレッドが、中止されたスレッドが必要とするロックを保持している場合、デッドロックが発生する可能性があります。If the thread that calls Abort holds a lock that the aborted thread requires, a deadlock can occur.

開始されていないスレッドで Abort が呼び出されると、Start が呼び出されたときにスレッドが中止されます。If Abort is called on a thread that has not been started, the thread will abort when Start is called. ブロックされている、またはスリープ状態のスレッドで Abort が呼び出された場合、スレッドは中断されてから中止されます。If Abort is called on a thread that is blocked or is sleeping, the thread is interrupted and then aborted.

中断されたスレッドで Abort が呼び出されると、Abortを呼び出したスレッドで ThreadStateException がスローされ、中止されるスレッドの ThreadState プロパティに AbortRequested が追加されます。If Abort is called on a thread that has been suspended, a ThreadStateException is thrown in the thread that called Abort, and AbortRequested is added to the ThreadState property of the thread being aborted. Resume が呼び出されるまで、ThreadAbortException は中断されたスレッドでスローされません。A ThreadAbortException is not thrown in the suspended thread until Resume is called.

アンマネージコードの実行中にマネージスレッドで Abort が呼び出された場合、そのスレッドがマネージコードに戻るまで、ThreadAbortException はスローされません。If Abort is called on a managed thread while it is executing unmanaged code, a ThreadAbortException is not thrown until the thread returns to managed code.

Abort の2回の呼び出しが同時に発生した場合、1回の呼び出しで状態情報を設定し、もう一方の呼び出しで Abortを実行することができます。If two calls to Abort come at the same time, it is possible for one call to set the state information and the other call to execute the Abort. ただし、アプリケーションでこの状況を検出することはできません。However, an application cannot detect this situation.

スレッドで Abort が呼び出されると、スレッドの状態に AbortRequestedが含まれます。After Abort is invoked on a thread, the state of the thread includes AbortRequested. Abortの呼び出しが成功した結果としてスレッドが終了すると、スレッドの状態が Stoppedに変更されます。After the thread has terminated as a result of a successful call to Abort, the state of the thread is changed to Stopped. 十分な権限を持っている場合、Abort のターゲットであるスレッドは、ResetAbort メソッドを使用して中止を取り消すことができます。With sufficient permissions, a thread that is the target of an Abort can cancel the abort using the ResetAbort method. ResetAbort メソッドの呼び出しを示す例については、ThreadAbortException クラスを参照してください。For an example that demonstrates calling the ResetAbort method, see the ThreadAbortException class.

セキュリティ

SecurityPermission
スレッドに対する高度な操作の場合。for advanced operations on threads. ControlThread (関連する列挙体)Associated enumeration: ControlThread.

こちらもご覧ください

適用対象