ThreadAbortException Klas

Definitie

De uitzondering die wordt gegenereerd wanneer een aanroep naar de Abort(Object) methode wordt gedaan. Deze klasse kan niet worden overgenomen.

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

Voorbeelden

In het volgende voorbeeld ziet u hoe u een thread afgebroken hebt. De thread die de ThreadAbortException methode ontvangt, gebruikt de ResetAbort methode om de afgebroken aanvraag te annuleren en door te gaan met uitvoeren.

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

Deze code produceert de volgende uitvoer:

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.

Opmerkingen

Wanneer er een aanroep wordt gedaan naar de methode Abort om een thread te vernietigen, genereert de algemene taalruntime een ThreadAbortException op .NET Framework. ThreadAbortException is een speciale uitzondering die kan worden gevangen, maar deze wordt automatisch opnieuw gegenereerd aan het einde van het catch blok. Wanneer deze uitzondering wordt gegenereerd, worden alle finally blokken uitgevoerd voordat de thread wordt beëindigd. Omdat de thread een niet-gebonden berekening kan uitvoeren in de finally blokken of het aanroepen Thread.ResetAbort om de afgebroken bewerking te annuleren, is er geen garantie dat de thread ooit wordt beëindigd. Als u wilt wachten totdat de afgebroken thread is beëindigd, kunt u de Thread.Join methode aanroepen. Join is een blokkerende aanroep die pas wordt geretourneerd als de thread daadwerkelijk stopt met uitvoeren.

Note

.NET Core en .NET 5+ alleen: Hoewel dit type bestaat in .NET Core en .NET 5+, omdat Abort niet wordt ondersteund, genereert de algemene taalruntime nooit ThreadAbortException.

Note

Wanneer de Common Language Runtime (CLR) achtergrondthreads stopt nadat alle voorgrondthreads in een beheerd uitvoerbaar bestand zijn beëindigd, wordt deze niet gebruikt Thread.Abort. Daarom kunt u niet gebruiken ThreadAbortException om te detecteren wanneer achtergrondthreads worden beëindigd door de CLR.

ThreadAbortException gebruikt HRESULT COR_E_THREADABORTED, die de waarde 0x80131530heeft .

Note

De waarde van de overgenomen Data eigenschap is altijd null.

Eigenschappen

Name Description
Data

Hiermee haalt u een verzameling sleutel-waardeparen op die aanvullende door de gebruiker gedefinieerde informatie over de uitzondering bieden.

(Overgenomen van Exception)
ExceptionState

Hiermee haalt u een object op dat toepassingsspecifieke informatie bevat die betrekking heeft op de thread die wordt afgebroken.

HelpLink

Hiermee haalt u een koppeling op naar het Help-bestand dat aan deze uitzondering is gekoppeld.

(Overgenomen van Exception)
HResult

Hiermee wordt HRESULT opgehaald of ingesteld, een gecodeerde numerieke waarde die is toegewezen aan een specifieke uitzondering.

(Overgenomen van Exception)
InnerException

Hiermee haalt u het Exception exemplaar op dat de huidige uitzondering heeft veroorzaakt.

(Overgenomen van Exception)
Message

Hiermee wordt een bericht weergegeven waarin de huidige uitzondering wordt beschreven.

(Overgenomen van Exception)
Source

Hiermee wordt de naam van de toepassing of het object dat de fout veroorzaakt, opgehaald of ingesteld.

(Overgenomen van Exception)
StackTrace

Hiermee haalt u een tekenreeksweergave van de directe frames op de aanroepstack op.

(Overgenomen van Exception)
TargetSite

Hiermee haalt u de methode op waarmee de huidige uitzondering wordt gegenereerd.

(Overgenomen van Exception)

Methoden

Name Description
Equals(Object)

Bepaalt of het opgegeven object gelijk is aan het huidige object.

(Overgenomen van Object)
GetBaseException()

Wanneer deze wordt overschreven in een afgeleide klasse, retourneert u de Exception hoofdoorzaak van een of meer volgende uitzonderingen.

(Overgenomen van Exception)
GetHashCode()

Fungeert als de standaardhashfunctie.

(Overgenomen van Object)
GetObjectData(SerializationInfo, StreamingContext)

Wanneer deze wordt overschreven in een afgeleide klasse, stelt u de SerializationInfo met informatie over de uitzondering in.

(Overgenomen van Exception)
GetType()

Hiermee haalt u het runtimetype van het huidige exemplaar op.

(Overgenomen van Exception)
MemberwiseClone()

Hiermee maakt u een ondiepe kopie van de huidige Object.

(Overgenomen van Object)
ToString()

Hiermee maakt en retourneert u een tekenreeksweergave van de huidige uitzondering.

(Overgenomen van Exception)

gebeurtenis

Name Description
SerializeObjectState

Treedt op wanneer een uitzondering wordt geserialiseerd om een uitzonderingsstatusobject te maken dat geserialiseerde gegevens over de uitzondering bevat.

(Overgenomen van Exception)

Van toepassing op

Zie ook