Teilen über


Thread.Abort Methode

Definition

Löst eine ThreadAbortException im Thread aus, für den der Aufruf erfolgte, um das Beenden des Threads zu beginnen. Durch den Aufruf dieser Methode wird der Thread i. d. R. beendet.

Überlädt

Abort()
Veraltet.

Löst eine ThreadAbortException im Thread aus, für den der Aufruf erfolgte, um das Beenden des Threads zu beginnen. Durch den Aufruf dieser Methode wird der Thread i. d. R. beendet.

Abort(Object)
Veraltet.

Löst eine ThreadAbortException im Thread aus, für den der Aufruf erfolgte, um das Beenden des Threads zu beginnen. Gleichzeitig werden Ausnahmeinformationen über das Beenden des Threads bereitgestellt. Durch den Aufruf dieser Methode wird der Thread i. d. R. beendet.

Hinweise

Wichtig

Die Thread.Abort -Methode sollte mit Vorsicht verwendet werden. Insbesondere wenn Sie ihn aufrufen, um einen anderen Thread als den aktuellen Thread zu abbrechen, wissen Sie nicht, welcher Code ausgeführt wurde oder nicht ausgeführt wurde, wenn ThreadAbortException ausgelöst wird. Sie können sich auch nicht sicher sein, ob es sich um den Zustand Ihrer Anwendung oder um einen Anwendungs- und Benutzerzustand handeln kann, für deren Beibehaltung sie verantwortlich ist. Ein Aufruf von Thread.Abort kann z. B. die Ausführung statischer Konstruktoren oder die Freigabe nicht verwalteter Ressourcen verhindern.

Abort()

Achtung

Thread.Abort is not supported and throws PlatformNotSupportedException.

Löst eine ThreadAbortException im Thread aus, für den der Aufruf erfolgte, um das Beenden des Threads zu beginnen. Durch den Aufruf dieser Methode wird der Thread i. d. R. 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 und höher: In allen Fällen.

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

Der abgebrochene Thread ist derzeit angehalten.

Hinweise

Diese Methode ist veraltet. In .NET 5 und höher erzeugt der Aufruf dieser Methode eine Kompilierzeitwarnung. Diese Methode löst zur Laufzeit unter .NET 5 und höher und PlatformNotSupportedException .NET Core eine aus.

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

Hinweis

Wenn ein Thread für sich selbst aufruft, ähnelt der Effekt dem Auslösen einer Ausnahme. der tritt sofort auf, und das Ergebnis Abort ThreadAbortException ist vorhersagbar. Wenn jedoch ein Thread in einem anderen Thread aufruft, unterbricht Abort der Abbruch den ausgeführten Code. Es besteht auch die Möglichkeit, dass ein statischer Konstruktor abgebrochen wird. In seltenen Fällen kann dies verhindern, dass Instanzen dieser Klasse in dieser Anwendungsdomäne erstellt werden. In den .NET Framework Versionen 1.0 und 1.1 besteht die Möglichkeit, dass der Thread abgebrochen wird, während ein Block ausgeführt wird. In diesem Fall wird der Block finally finally abgebrochen.

Es ist nicht garantiert, dass der Thread sofort oder überhaupt abgebrochen wird. Diese Situation kann auftreten, wenn ein Thread eine unbegrenzte Menge an Berechnungen in den Blöcken vorträgt, die als Teil der Abbruchprozedur aufgerufen werden, wodurch der Abbruch unbegrenzt finally verzögert wird. Um zu warten, bis ein Thread abgebrochen wurde, können Sie die -Methode für den Thread aufrufen, nachdem Sie die -Methode aufgerufen haben. Es gibt jedoch keine Garantie, dass der Join Abort Warteaufruf beendet wird.

Hinweis

Der Thread, der aufruft, kann blockieren, wenn sich der abgebrochene Thread in einem geschützten Codebereich befindet, z. B. einem Block, Block oder Abort catch finally eingeschränkten Ausführungsbereich. Wenn der Thread, der aufruft, eine Sperre enthält, die für den abgebrochenen Thread erforderlich Abort ist, kann ein Deadlock auftreten.

Wenn für einen Thread aufgerufen wird, der nicht gestartet wurde, wird der Thread Abort abgebrochen, wenn Start aufgerufen wird. Wenn für einen Thread aufgerufen wird, der blockiert ist oder sich im In-/Aus-Befindet, wird der Thread unterbrochen und Abort dann abgebrochen.

Wenn für einen angehaltenen Thread aufgerufen wird, wird in dem Thread ausgelöst, der aufgerufen hat, und der -Eigenschaft des abgebrochenen Abort ThreadStateException Threads Abort AbortRequested ThreadState hinzugefügt. Eine ThreadAbortException wird im angehaltenen Thread erst ausgelöst, wenn Resume aufgerufen wird.

Wenn für einen verwalteten Thread aufgerufen wird, während nicht verwalteter Code ausgeführt wird, wird erst ausgelöst, wenn der Thread zu verwaltetem Abort ThreadAbortException Code zurückkehrt.

Wenn zwei Aufrufe gleichzeitig ausgeführt werden, ist es möglich, dass ein Aufruf die Zustandsinformationen und der andere aufruft, Abort um Abort auszuführen. Eine Anwendung kann diese Situation jedoch nicht erkennen.

Nachdem Abort für einen Thread aufgerufen wurde, enthält der Zustand des Threads AbortRequested . Nachdem der Thread aufgrund eines erfolgreichen Aufrufs von beendet wurde, wird der Zustand des Threads Abort in Stopped geändert. Mit ausreichenden Berechtigungen kann ein Thread, der das Ziel eines ist, den Abort Abbruch mithilfe der -Methode ResetAbort abbrechen. Ein Beispiel, das das Aufrufen der -Methode ResetAbort veranschaulicht, finden Sie in der ThreadAbortException -Klasse.

Siehe auch

Gilt für

Abort(Object)

Achtung

Thread.Abort is not supported and throws PlatformNotSupportedException.

Löst eine ThreadAbortException im Thread aus, für den der Aufruf erfolgte, um das Beenden des Threads zu beginnen. Gleichzeitig werden Ausnahmeinformationen über das Beenden des Threads bereitgestellt. Durch den Aufruf dieser Methode wird der Thread i. d. R. 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. über den Zustand), die vom abgebrochenen Thread verwendet werden können.

Attribute

Ausnahmen

Nur .NET Core und .NET 5 und höher: In allen Fällen.

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

Der abgebrochene Thread ist derzeit angehalten.

Beispiele

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

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

Hinweise

Diese Methode ist veraltet. In .NET 5 und höher erzeugt der Aufruf dieser Methode eine Kompilierzeitwarnung. Diese Methode löst zur Laufzeit unter .NET 5 und höher und PlatformNotSupportedException .NET Core eine aus.

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

Hinweis

Wenn ein Thread für sich selbst aufruft, ähnelt der Effekt dem Auslösen einer Ausnahme. der tritt sofort auf, und das Ergebnis Abort ThreadAbortException ist vorhersagbar. Wenn jedoch ein Thread in einem anderen Thread aufruft, unterbricht Abort der Abbruch den ausgeführten Code. Es besteht die Möglichkeit, dass ein statischer Konstruktor abgebrochen wird. In seltenen Fällen kann dies verhindern, dass Instanzen dieser Klasse in dieser Anwendungsdomäne erstellt werden. In den .NET Framework Versionen 1.0 und 1.1 besteht die Möglichkeit, dass der Thread abgebrochen wird, während ein Block ausgeführt wird. In diesem Fall wird der Block finally finally abgebrochen.

Es ist nicht garantiert, dass der Thread sofort oder überhaupt abgebrochen wird. Diese Situation kann auftreten, wenn ein Thread eine unbegrenzte Menge an Berechnungen in den Blöcken vorträgt, die als Teil der Abbruchprozedur aufgerufen werden, wodurch der Abbruch unbegrenzt finally verzögert wird. Um zu warten, bis ein Thread abgebrochen wurde, können Sie die -Methode für den Thread aufrufen, nachdem Sie die -Methode aufgerufen haben. Es gibt jedoch keine Garantie, dass der Join Abort Warteaufruf beendet wird.

Hinweis

Der Thread, der aufruft, kann blockieren, wenn sich der abgebrochene Thread in einem geschützten Codebereich befindet, z. B. einem Block, Block oder Abort catch finally eingeschränkten Ausführungsbereich. Wenn der Thread, der aufruft, eine Sperre enthält, die für den abgebrochenen Thread erforderlich Abort ist, kann ein Deadlock auftreten.

Wenn für einen Thread aufgerufen wird, der nicht gestartet wurde, wird der Thread Abort abgebrochen, wenn Start aufgerufen wird. Wenn für einen Thread aufgerufen wird, der blockiert ist oder sich im In-/Aus-Befindet, wird der Thread unterbrochen und Abort dann abgebrochen.

Wenn für einen angehaltenen Thread aufgerufen wird, wird in dem Thread ausgelöst, der aufgerufen hat, und der -Eigenschaft des abgebrochenen Abort ThreadStateException Threads Abort AbortRequested ThreadState hinzugefügt. Eine ThreadAbortException wird im angehaltenen Thread erst ausgelöst, wenn Resume aufgerufen wird.

Wenn für einen verwalteten Thread aufgerufen wird, während nicht verwalteter Code ausgeführt wird, wird erst ausgelöst, wenn der Thread zu verwaltetem Abort ThreadAbortException Code zurückkehrt.

Wenn zwei Aufrufe gleichzeitig ausgeführt werden, ist es möglich, dass ein Aufruf die Zustandsinformationen und der andere aufruft, Abort um Abort auszuführen. Eine Anwendung kann diese Situation jedoch nicht erkennen.

Nachdem Abort für einen Thread aufgerufen wurde, enthält der Zustand des Threads AbortRequested . Nachdem der Thread aufgrund eines erfolgreichen Aufrufs von beendet wurde, wird der Zustand des Threads Abort in Stopped geändert. Mit ausreichenden Berechtigungen kann ein Thread, der das Ziel eines ist, den Abort Abbruch mithilfe der -Methode ResetAbort abbrechen. Ein Beispiel, das das Aufrufen der -Methode ResetAbort veranschaulicht, finden Sie in der ThreadAbortException -Klasse.

Siehe auch

Gilt für