次の方法で共有


Thread.Abort メソッド

定義

スレッドが呼び出されたスレッドで ThreadAbortException を発生させ、スレッドを終了するプロセスを開始します。 通常、このメソッドを呼び出すとスレッドが終了します。

オーバーロード

名前 説明
Abort()
古い.

スレッドが呼び出されたスレッドで ThreadAbortException を発生させ、スレッドを終了するプロセスを開始します。 通常、このメソッドを呼び出すとスレッドが終了します。

Abort(Object)
古い.

スレッドが呼び出されたスレッドで ThreadAbortException を発生させ、スレッド終了に関する例外情報も提供しながら、スレッドを終了するプロセスを開始します。 通常、このメソッドを呼び出すとスレッドが終了します。

注釈

Important

Thread.Abortメソッドは注意して使用してください。 特に、現在のスレッド以外のスレッドを中止するために呼び出すと、 ThreadAbortException がスローされたときに実行されたコードや実行に失敗したコードがわからない。 また、アプリケーションの状態や、アプリケーションが保持する責任を負うユーザーの状態についても確信を持てません。 たとえば、 Thread.Abort を呼び出すと、静的コンストラクターの実行や、マネージド リソースまたはアンマネージド リソースの解放が妨げになる場合があります。

Abort()

ソース:
Thread.cs
ソース:
Thread.cs
ソース:
Thread.cs
ソース:
Thread.cs
ソース:
Thread.cs

注意事項

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は、アプリケーション コードでキャッチできる特別な例外ですが、ResetAbortが呼び出されない限り、catch ブロックの最後に再スローされます。 ResetAbort は中止要求を取り消し、 ThreadAbortException がスレッドを終了するのを防ぎます。 実行されていない finally ブロックは、スレッドが中止される前に実行されます。

スレッドがそれ自体で Abort を呼び出すと、その影響は例外のスローに似ています。 ThreadAbortException はすぐに発生し、結果は予測可能です。 ただし、あるスレッドが別のスレッドで Abort 呼び出した場合、中止は実行中のコードを中断します。 静的コンストラクターが中止される可能性もあります。 まれに、そのクラスのインスタンスがそのアプリケーション ドメインに作成されない場合があります。

スレッドが直ちに中止されるとは限りません。また、まったく中止されるわけではありません。 この状況は、中止プロシージャの一部として呼び出される finally ブロックでスレッドが無制限の計算を行い、中止を無期限に遅らせる場合に発生する可能性があります。 スレッドが中止されるまで待機するには、Abort メソッドを呼び出した後、スレッドで Join メソッドを呼び出すことができますが、待機が終了する保証はありません。

Abortを呼び出すスレッドは、中止されるスレッドが、catch ブロック、finally ブロック、制約付き実行領域など、コードの保護された領域にある場合にブロックする可能性があります。 Abortを呼び出すスレッドが、中止されたスレッドに必要なロックを保持している場合は、デッドロックが発生する可能性があります。

開始されていないスレッドで Abort が呼び出されると、 Start が呼び出されたときにスレッドが中止されます。 ブロックされているスレッドまたはスリープ状態のスレッドで Abort が呼び出された場合、スレッドは中断され、中止されます。

中断されたスレッドでAbortが呼び出されると、Abortを呼び出したスレッドでThreadStateExceptionがスローされ、中止されるスレッドのThreadState プロパティにAbortRequestedが追加されます。 Resumeが呼び出されるまで、ThreadAbortExceptionは中断されたスレッドでスローされません。

アンマネージ コードの実行中にマネージド スレッドで Abort が呼び出された場合、スレッドがマネージド コードに戻るまで、 ThreadAbortException はスローされません。

Abortに対する 2 回の呼び出しが同時に行われる場合、1 つの呼び出しで状態情報を設定し、もう 1 つの呼び出しでAbortを実行できます。 ただし、アプリケーションはこの状況を検出できません。

スレッドで Abort が呼び出されると、スレッドの状態に AbortRequestedが含まれます。 Abortの正常な呼び出しの結果としてスレッドが終了すると、スレッドの状態がStoppedに変更されます。 十分なアクセス許可により、 Abort のターゲットであるスレッドは、 ResetAbort メソッドを使用して中止を取り消すことができます。 ResetAbort メソッドの呼び出しを示す例については、ThreadAbortException クラスを参照してください。

こちらもご覧ください

適用対象

Abort(Object)

ソース:
Thread.cs
ソース:
Thread.cs
ソース:
Thread.cs
ソース:
Thread.cs
ソース:
Thread.cs

注意事項

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 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);
        }
    }
}
open System.Threading

let testMethod () =
    try
        while true do
            printfn "New thread running."
            Thread.Sleep 1000
    with :? ThreadAbortException as abortException ->
        printfn $"{abortException.ExceptionState :?> string}"

let newThread = Thread testMethod
newThread.Start()
Thread.Sleep 1000

// Abort newThread.
printfn "Main aborting new thread."
newThread.Abort "Information from Main."

// Wait for the thread to terminate.
newThread.Join()
printfn "New thread terminated - Main exiting."
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 以降のバージョンでは、このメソッドを呼び出すとコンパイル時の警告が生成されます。 このメソッドは、実行時に .NET 5 以降および .NET Core で PlatformNotSupportedException をスローします。

このメソッドがスレッドで呼び出されると、システムはスレッドで ThreadAbortException をスローして中止します。 ThreadAbortExceptionは、アプリケーション コードでキャッチできる特別な例外ですが、ResetAbortが呼び出されない限り、catch ブロックの最後に再スローされます。 ResetAbort は中止要求を取り消し、 ThreadAbortException がスレッドを終了するのを防ぎます。 実行されていない finally ブロックは、スレッドが中止される前に実行されます。

スレッドがそれ自体で Abort を呼び出すと、その影響は例外のスローに似ています。 ThreadAbortException はすぐに発生し、結果は予測可能です。 ただし、あるスレッドが別のスレッドで Abort 呼び出した場合、中止は実行中のコードを中断します。 静的コンストラクターが中止される可能性があります。 まれに、そのクラスのインスタンスがそのアプリケーション ドメインに作成されない場合があります。

スレッドが直ちに中止されるとは限りません。また、まったく中止されるわけではありません。 この状況は、中止プロシージャの一部として呼び出される finally ブロックでスレッドが無制限の計算を行い、中止を無期限に遅らせる場合に発生する可能性があります。 スレッドが中止されるまで待機するには、Abort メソッドを呼び出した後にスレッドで Join メソッドを呼び出すことができますが、待機が終了する保証はありません。

Abortを呼び出すスレッドは、中止されるスレッドが、catch ブロック、finally ブロック、制約付き実行領域など、コードの保護された領域にある場合にブロックする可能性があります。 Abortを呼び出すスレッドが、中止されたスレッドに必要なロックを保持している場合は、デッドロックが発生する可能性があります。

開始されていないスレッドで Abort が呼び出されると、 Start が呼び出されたときにスレッドが中止されます。 ブロックされているスレッドまたはスリープ状態のスレッドで Abort が呼び出された場合、スレッドは中断され、中止されます。

中断されたスレッドでAbortが呼び出されると、Abortを呼び出したスレッドでThreadStateExceptionがスローされ、中止されるスレッドのThreadState プロパティにAbortRequestedが追加されます。 Resumeが呼び出されるまで、ThreadAbortExceptionは中断されたスレッドでスローされません。

アンマネージ コードの実行中にマネージド スレッドで Abort が呼び出された場合、スレッドがマネージド コードに戻るまで、 ThreadAbortException はスローされません。

Abortに対する 2 回の呼び出しが同時に行われる場合、1 つの呼び出しで状態情報を設定し、もう 1 つの呼び出しでAbortを実行できます。 ただし、アプリケーションはこの状況を検出できません。

スレッドで Abort が呼び出されると、スレッドの状態に AbortRequestedが含まれます。 Abortの正常な呼び出しの結果としてスレッドが終了すると、スレッドの状態がStoppedに変更されます。 十分なアクセス許可により、 Abort のターゲットであるスレッドは、 ResetAbort メソッドを使用して中止を取り消すことができます。 ResetAbort メソッドの呼び出しを示す例については、ThreadAbortException クラスを参照してください。

こちらもご覧ください

適用対象