Freigeben über


Thread.Abort Methode

Definition

Löst einen ThreadAbortException Inthread aus, für den er aufgerufen wird, um den Prozess des Beendens des Threads zu beginnen. Durch Aufrufen dieser Methode wird der Thread in der Regel beendet.

Überlädt

Name Beschreibung
Abort()
Veraltet.

Löst einen ThreadAbortException Inthread aus, in dem er aufgerufen wird, um den Prozess des Beendens des Threads zu beginnen. Durch Aufrufen dieser Methode wird der Thread in der Regel beendet.

Abort(Object)
Veraltet.

Löst einen ThreadAbortException Inthread aus, für den er aufgerufen wird, um den Prozess des Beendens des Threads zu beginnen und gleichzeitig Ausnahmeinformationen zum Beenden des Threads bereitzustellen. Durch Aufrufen dieser Methode wird der Thread in der Regel beendet.

Hinweise

Von Bedeutung

Verwenden Sie die Thread.Abort Methode mit Vorsicht. Insbesondere wenn Sie ihn aufrufen, um einen anderen Thread als den aktuellen Thread abzubrechen, wissen Sie nicht, welcher Code ausgeführt wurde oder nicht ausgeführt werden konnte, wenn der ThreadAbortException Thread ausgelöst wird. Sie können auch nicht sicher sein, in welchem Zustand sich Ihre Anwendung oder irgendein Anwendungs- und Benutzerzustand befindet, für dessen Erhaltung sie verantwortlich ist. Beispielsweise kann das Aufrufen Thread.Abort die Ausführung statischer Konstruktoren oder die Veröffentlichung von verwalteten oder nicht verwalteten Ressourcen verhindern.

Abort()

Quelle:
Thread.cs
Quelle:
Thread.cs
Quelle:
Thread.cs
Quelle:
Thread.cs
Quelle:
Thread.cs

Achtung

Thread.Abort is not supported and throws PlatformNotSupportedException.

Löst einen ThreadAbortException Inthread aus, in dem er aufgerufen wird, um den Prozess des Beendens des Threads zu beginnen. Durch Aufrufen dieser Methode wird der Thread in der Regel beendet.

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 ()
Attribute

Ausnahmen

Nur .NET Core und .NET 5+ : In allen Fällen.

Der Aufrufer verfügt nicht über die erforderliche Berechtigung.

Der thread, der abgebrochen wird, wird derzeit angehalten.

Hinweise

Diese Methode ist veraltet. In .NET 5 und höheren Versionen erzeugt das Aufrufen dieser Methode eine Kompilierungszeitwarnung. Diese Methode löst zur Laufzeit auf .NET 5 und höher und .NET Core ein PlatformNotSupportedException .

Wenn diese Methode in einem Thread aufgerufen wird, löst das System einen ThreadAbortException in dem Thread aus, um sie abzubrechen. ThreadAbortException ist eine spezielle Ausnahme, die vom Anwendungscode abgefangen werden kann, aber am Ende des catch Blocks erneut ausgelöst wird, es sei denn ResetAbort , sie wird aufgerufen. ResetAbort bricht die Abbruchanforderung ab und verhindert, dass der ThreadAbortException Thread beendet wird. Nicht ausgeführte finally Blöcke werden ausgeführt, bevor der Thread abgebrochen wird.

Hinweis

Wenn ein Thread sich selbst aufruft Abort , ähnelt der Effekt dem Auslösen einer Ausnahme. Dies ThreadAbortException geschieht sofort, und das Ergebnis ist vorhersagbar. Wenn jedoch ein Thread einen anderen Thread aufruft Abort , unterbricht der Abbruch den ausgeführten Code. Es besteht auch die Möglichkeit, dass ein statischer Konstruktor abgebrochen werden kann. In seltenen Fällen kann dies verhindern, dass Instanzen dieser Klasse in dieser Anwendungsdomäne erstellt werden.

Der Thread wird nicht garantiert sofort oder gar abgebrochen. Diese Situation kann auftreten, wenn ein Thread eine ungebundene Berechnungsmenge in den finally Blöcken durchführt, die als Teil der Abortprozedur aufgerufen werden, wodurch der Abbruch unbegrenzt verzögert wird. Um zu warten, bis ein Thread abgebrochen wurde, können Sie die Join Methode für den Thread aufrufen, nachdem die Abort Methode aufgerufen wurde, aber es gibt keine Garantie, dass die Wartezeit endet.

Hinweis

Der Thread, der aufruftAbort, kann blockieren, wenn sich der abgebrochene Thread in einem geschützten Codebereich befindet, z. B. einen Block, einen Block, finally einen catch Block oder einen eingeschränkten Ausführungsbereich. Wenn der Thread, der eine Sperre aufruft Abort , die der abgebrochene Thread erfordert, kann ein Deadlock auftreten.

Wenn Abort für einen Thread aufgerufen wird, der nicht gestartet wurde, wird der Thread abgebrochen, wenn Start er aufgerufen wird. Wenn Abort für einen thread aufgerufen wird, der blockiert oder schlafend ist, wird der Thread unterbrochen und dann abgebrochen.

Wenn Abort für einen angehaltenen Thread aufgerufen wird, wird ein ThreadStateException Thread ausgelöst, der aufgerufen Abortwird, und AbortRequested der Eigenschaft des abgebrochenen Threads hinzugefügt ThreadState wird. A ThreadAbortException wird erst im angehaltenen Thread ausgelöst, wenn Resume er aufgerufen wird.

Wenn Abort ein verwalteter Thread aufgerufen wird, während er nicht verwalteten Code ausführt, wird ein ThreadAbortException Fehler erst ausgelöst, wenn der Thread zum verwalteten Code zurückkehrt.

Wenn zwei Aufrufe Abort gleichzeitig eingehen, ist es möglich, dass ein Aufruf die Statusinformationen und den anderen Aufruf zum Ausführen des AbortZustands festlegen kann. Eine Anwendung kann diese Situation jedoch nicht erkennen.

Nachdem Abort der Thread auf einem Thread aufgerufen wurde, enthält AbortRequestedder Zustand des Threads . Nachdem der Thread aufgrund eines erfolgreichen Aufrufs Abortbeendet wurde, wird der Status des Threads in Stopped" geändert. Mit ausreichenden Berechtigungen kann ein Thread, der das Ziel eines Abort Abbruchs ist, mithilfe der ResetAbort Methode abbrechen. Ein Beispiel, das das Aufrufen der ResetAbort Methode veranschaulicht, finden Sie in der ThreadAbortException Klasse.

Weitere Informationen

Gilt für:

Abort(Object)

Quelle:
Thread.cs
Quelle:
Thread.cs
Quelle:
Thread.cs
Quelle:
Thread.cs
Quelle:
Thread.cs

Achtung

Thread.Abort is not supported and throws PlatformNotSupportedException.

Löst einen ThreadAbortException Inthread aus, für den er aufgerufen wird, um den Prozess des Beendens des Threads zu beginnen und gleichzeitig Ausnahmeinformationen zum Beenden des Threads bereitzustellen. Durch Aufrufen dieser Methode wird der Thread in der Regel beendet.

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)

Parameter

stateInfo
Object

Ein Objekt, das anwendungsspezifische Informationen enthält, z. B. den Zustand, der vom abgebrochenen Thread verwendet werden kann.

Attribute

Ausnahmen

Nur .NET Core und .NET 5+ : In allen Fällen.

Der Aufrufer verfügt nicht über die erforderliche Berechtigung.

Der thread, der abgebrochen wird, wird derzeit angehalten.

Beispiele

Das folgende Codebeispiel zeigt, wie Informationen an einen thread übergeben werden, der abgebrochen wird.

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

Hinweise

Diese Methode ist veraltet. In .NET 5 und höheren Versionen erzeugt das Aufrufen dieser Methode eine Kompilierungszeitwarnung. Diese Methode löst zur Laufzeit auf .NET 5 und höher und .NET Core ein PlatformNotSupportedException .

Wenn diese Methode in einem Thread aufgerufen wird, löst das System einen ThreadAbortException in dem Thread aus, um sie abzubrechen. ThreadAbortException ist eine spezielle Ausnahme, die vom Anwendungscode abgefangen werden kann, aber am Ende des catch Blocks erneut ausgelöst wird, es sei denn ResetAbort , sie wird aufgerufen. ResetAbort bricht die Abbruchanforderung ab und verhindert, dass der ThreadAbortException Thread beendet wird. Nicht ausgeführte finally Blöcke werden ausgeführt, bevor der Thread abgebrochen wird.

Hinweis

Wenn ein Thread sich selbst aufruft Abort , ähnelt der Effekt dem Auslösen einer Ausnahme. Dies ThreadAbortException geschieht sofort, und das Ergebnis ist vorhersagbar. Wenn jedoch ein Thread einen anderen Thread aufruft Abort , unterbricht der Abbruch den ausgeführten Code. Es besteht die Möglichkeit, dass ein statischer Konstruktor abgebrochen werden kann. In seltenen Fällen kann dies verhindern, dass Instanzen dieser Klasse in dieser Anwendungsdomäne erstellt werden.

Der Thread wird nicht garantiert sofort oder gar abgebrochen. Diese Situation kann auftreten, wenn ein Thread eine ungebundene Berechnungsmenge in den finally Blöcken durchführt, die als Teil der Abortprozedur aufgerufen werden, wodurch der Abbruch unbegrenzt verzögert wird. Um zu warten, bis ein Thread abgebrochen wurde, können Sie die Join Methode für den Thread aufrufen, nachdem Sie die Abort Methode aufgerufen haben, aber es gibt keine Garantie, dass die Wartezeit beendet wird.

Hinweis

Der Thread, der aufruftAbort, kann blockieren, wenn sich der abgebrochene Thread in einem geschützten Codebereich befindet, z. B. einen Block, einen Block, finally einen catch Block oder einen eingeschränkten Ausführungsbereich. Wenn der Thread, der eine Sperre aufruft Abort , die der abgebrochene Thread erfordert, kann ein Deadlock auftreten.

Wenn Abort für einen Thread aufgerufen wird, der nicht gestartet wurde, wird der Thread abgebrochen, wenn Start er aufgerufen wird. Wenn Abort für einen thread aufgerufen wird, der blockiert oder schlafend ist, wird der Thread unterbrochen und dann abgebrochen.

Wenn Abort für einen angehaltenen Thread aufgerufen wird, wird ein ThreadStateException Thread ausgelöst, der aufgerufen Abortwird, und AbortRequested der Eigenschaft des abgebrochenen Threads hinzugefügt ThreadState wird. A ThreadAbortException wird erst im angehaltenen Thread ausgelöst, wenn Resume er aufgerufen wird.

Wenn Abort ein verwalteter Thread aufgerufen wird, während er nicht verwalteten Code ausführt, wird ein ThreadAbortException Fehler erst ausgelöst, wenn der Thread zum verwalteten Code zurückkehrt.

Wenn zwei Aufrufe Abort gleichzeitig eingehen, ist es möglich, dass ein Aufruf die Statusinformationen und den anderen Aufruf zum Ausführen des AbortZustands festlegen kann. Eine Anwendung kann diese Situation jedoch nicht erkennen.

Nachdem Abort der Thread auf einem Thread aufgerufen wurde, enthält AbortRequestedder Zustand des Threads . Nachdem der Thread aufgrund eines erfolgreichen Aufrufs Abortbeendet wurde, wird der Status des Threads in Stopped" geändert. Mit ausreichenden Berechtigungen kann ein Thread, der das Ziel eines Abort Abbruchs ist, mithilfe der ResetAbort Methode abbrechen. Ein Beispiel, das das Aufrufen der ResetAbort Methode veranschaulicht, finden Sie in der ThreadAbortException Klasse.

Weitere Informationen

Gilt für: