Freigeben über


ThreadAbortException Klasse

Definition

Die Ausnahme, die ausgelöst wird, wenn ein Aufruf der Abort(Object) Methode ausgeführt wird. Diese Klasse kann nicht vererbt werden.

public ref class ThreadAbortException sealed : SystemException
public sealed class ThreadAbortException : SystemException
[System.Serializable]
public sealed class ThreadAbortException : SystemException
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class ThreadAbortException : SystemException
type ThreadAbortException = class
    inherit SystemException
[<System.Serializable>]
type ThreadAbortException = class
    inherit SystemException
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type ThreadAbortException = class
    inherit SystemException
Public NotInheritable Class ThreadAbortException
Inherits SystemException
Vererbung
ThreadAbortException
Attribute

Beispiele

Im folgenden Beispiel wird das Abbrechen eines Threads veranschaulicht. Der Thread, der ResetAbort die ThreadAbortException Methode empfängt, um die Abbruchanforderung abzubrechen und die Ausführung fortzusetzen.

using System;
using System.Threading;
using System.Security.Permissions;

public class ThreadWork {
    public static void DoWork() {
        try {
            for(int i=0; i<100; i++) {
                Console.WriteLine("Thread - working.");
                Thread.Sleep(100);
            }
        }
        catch(ThreadAbortException e) {
            Console.WriteLine("Thread - caught ThreadAbortException - resetting.");
            Console.WriteLine("Exception message: {0}", e.Message);
            Thread.ResetAbort();
        }
        Console.WriteLine("Thread - still alive and working.");
        Thread.Sleep(1000);
        Console.WriteLine("Thread - finished working.");
    }
}

class ThreadAbortTest {
    public static void Main() {
        ThreadStart myThreadDelegate = new ThreadStart(ThreadWork.DoWork);
        Thread myThread = new Thread(myThreadDelegate);
        myThread.Start();
        Thread.Sleep(100);
        Console.WriteLine("Main - aborting my thread.");
        myThread.Abort();
        myThread.Join();
        Console.WriteLine("Main ending.");
    }
}
Imports System.Threading
Imports System.Security.Permissions


Public Class ThreadWork
   Public Shared Sub DoWork()
      Try
         Dim i As Integer
         For i = 0 To 99
            Console.WriteLine("Thread - working.")
            Thread.Sleep(100)
         Next i
      Catch e As ThreadAbortException
         Console.WriteLine("Thread - caught ThreadAbortException - resetting.")
         Console.WriteLine("Exception message: {0}", e.Message)
         Thread.ResetAbort()
      End Try
      Console.WriteLine("Thread - still alive and working.")
      Thread.Sleep(1000)
      Console.WriteLine("Thread - finished working.")
   End Sub
End Class


Class ThreadAbortTest
   Public Shared Sub Main()
      Dim myThreadDelegate As New ThreadStart(AddressOf ThreadWork.DoWork)
      Dim myThread As New Thread(myThreadDelegate)
      myThread.Start()
      Thread.Sleep(100)
      Console.WriteLine("Main - aborting my thread.")
      myThread.Abort()
      myThread.Join()
      Console.WriteLine("Main ending.")
   End Sub
End Class

Mit diesem Code wird die folgende Ausgabe generiert:

Thread - working.
Main - aborting my thread.
Thread - caught ThreadAbortException - resetting.
Exception message: Thread was being aborted.
Thread - still alive and working.
Thread - finished working.
Main ending.

Hinweise

Wenn eine Methode aufgerufen wird Abort , um einen Thread zu zerstören, löst die Common Language Runtime ein ThreadAbortException .NET Framework aus. ThreadAbortException ist eine besondere Ausnahme, die abgefangen werden kann, aber sie wird automatisch am Ende des catch Blocks erneut ausgelöst. Wenn diese Ausnahme ausgelöst wird, führt die Laufzeit alle finally Blöcke aus, bevor der Thread beendet wird. Da der Thread eine ungebundene Berechnung in den finally Blöcken oder aufrufen Thread.ResetAbort kann, um den Abbruch abzubrechen, besteht keine Garantie dafür, dass der Thread jemals beendet wird. Wenn Sie warten möchten, bis der abgebrochene Thread beendet wurde, können Sie die Thread.Join Methode aufrufen. Join ist ein blockierender Aufruf, der erst zurückgegeben wird, wenn der Thread die Ausführung beendet.

Hinweis

Nur .NET Core und .NET 5+: Obwohl dieser Typ in .NET Core und .NET 5+ vorhanden ist, da Abort die Common Language Runtime nicht unterstützt wird, wird die Common Language Runtime nicht jemals ausgelöst ThreadAbortException.

Hinweis

Wenn die Common Language Runtime (CLR) Hintergrundthreads beendet, nachdem alle Vordergrundthreads in einer verwalteten ausführbaren Datei beendet wurden, wird sie nicht verwendet Thread.Abort. Daher können Sie nicht verwenden ThreadAbortException , um zu erkennen, wann Hintergrundthreads von der CLR beendet werden.

ThreadAbortException verwendet HRESULT COR_E_THREADABORTED, die den Wert 0x80131530hat.

Hinweis

Der Wert der geerbten Data Eigenschaft ist immer null.

Eigenschaften

Name Beschreibung
Data

Ruft eine Auflistung von Schlüssel-Wert-Paaren ab, die zusätzliche benutzerdefinierte Informationen zur Ausnahme bereitstellen.

(Geerbt von Exception)
ExceptionState

Ruft ein Objekt ab, das anwendungsspezifische Informationen im Zusammenhang mit dem Threadabbruch enthält.

HelpLink

Dient zum Abrufen oder Festlegen eines Links zur Hilfedatei, die dieser Ausnahme zugeordnet ist.

(Geerbt von Exception)
HResult

Dient zum Abrufen oder Festlegen von HRESULT, einem codierten numerischen Wert, der einer bestimmten Ausnahme zugewiesen ist.

(Geerbt von Exception)
InnerException

Ruft die Exception Instanz ab, die die aktuelle Ausnahme verursacht hat.

(Geerbt von Exception)
Message

Ruft eine Nachricht ab, die die aktuelle Ausnahme beschreibt.

(Geerbt von Exception)
Source

Dient zum Abrufen oder Festlegen des Namens der Anwendung oder des Objekts, das den Fehler verursacht.

(Geerbt von Exception)
StackTrace

Ruft eine Zeichenfolgendarstellung der unmittelbaren Frames im Aufrufstapel ab.

(Geerbt von Exception)
TargetSite

Ruft die Methode ab, die die aktuelle Ausnahme auslöst.

(Geerbt von Exception)

Methoden

Name Beschreibung
Equals(Object)

Bestimmt, ob das angegebene Objekt dem aktuellen Objekt entspricht.

(Geerbt von Object)
GetBaseException()

Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird die Exception Ursache einer oder mehrerer nachfolgenden Ausnahmen zurückgegeben.

(Geerbt von Exception)
GetHashCode()

Dient als Standardhashfunktion.

(Geerbt von Object)
GetObjectData(SerializationInfo, StreamingContext)
Veraltet.

Wenn sie in einer abgeleiteten Klasse überschrieben wird, werden die SerializationInfo Informationen zur Ausnahme festgelegt.

(Geerbt von Exception)
GetType()

Ruft den Laufzeittyp der aktuellen Instanz ab.

(Geerbt von Exception)
MemberwiseClone()

Erstellt eine flache Kopie der aktuellen Object.

(Geerbt von Object)
ToString()

Erstellt und gibt eine Zeichenfolgendarstellung der aktuellen Ausnahme zurück.

(Geerbt von Exception)

Ereignisse

Name Beschreibung
SerializeObjectState
Veraltet.

Tritt auf, wenn eine Ausnahme serialisiert wird, um ein Ausnahmestatusobjekt zu erstellen, das serialisierte Daten zu der Ausnahme enthält.

(Geerbt von Exception)

Gilt für:

Weitere Informationen