Thread.Abort Methode

Definitie

Hiermee wordt een ThreadAbortException in de thread weergegeven waarop deze wordt aangeroepen, om het proces van het beëindigen van de thread te starten. Als u deze methode aanroept, wordt de thread meestal beëindigd.

Overloads

Name Description
Abort()
Verouderd.

Hiermee wordt een ThreadAbortException in de thread weergegeven waarop deze wordt aangeroepen, om het proces van het beëindigen van de thread te starten. Als u deze methode aanroept, wordt de thread meestal beëindigd.

Abort(Object)
Verouderd.

Hiermee wordt een ThreadAbortException in de thread gegenereerd waarop deze wordt aangeroepen, om te beginnen met het beëindigen van de thread, terwijl ook uitzonderingsinformatie over de beëindiging van de thread wordt verstrekt. Als u deze methode aanroept, wordt de thread meestal beëindigd.

Opmerkingen

Important

Gebruik de Thread.Abort methode met voorzichtigheid. Met name wanneer u deze aanroept om een andere thread dan de huidige thread af te breken, weet u niet welke code is uitgevoerd of niet kan worden uitgevoerd wanneer de ThreadAbortException thread wordt gegenereerd. U kunt ook niet zeker zijn van de status van uw toepassing, noch van enige toepassings- en gebruikersstatus waarvoor deze verantwoordelijk is om te behouden. Het aanroepen van Thread.Abort kan bijvoorbeeld voorkomen dat statische constructors worden uitgevoerd of dat beheerde of onbeheerde bronnen worden vrijgegeven.

Abort()

Bron:
Thread.cs
Bron:
Thread.cs
Bron:
Thread.cs
Bron:
Thread.cs
Bron:
Thread.cs

Let op

Thread.Abort is not supported and throws PlatformNotSupportedException.

Hiermee wordt een ThreadAbortException in de thread weergegeven waarop deze wordt aangeroepen, om het proces van het beëindigen van de thread te starten. Als u deze methode aanroept, wordt de thread meestal beëindigd.

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

Uitzonderingen

.NET Core en .NET 5+ alleen: in alle gevallen.

De beller heeft niet de vereiste machtiging.

De thread die wordt afgebroken, wordt momenteel opgeschort.

Opmerkingen

Deze methode is verouderd. In .NET 5- en latere versies produceert het aanroepen van deze methode een waarschuwing voor compilatietijd. Deze methode genereert een PlatformNotSupportedException tijdens runtime op .NET 5 en hoger en .NET Core.

Wanneer deze methode wordt aangeroepen op een thread, genereert het systeem een ThreadAbortException in de thread om deze af te breken. ThreadAbortExceptionis een speciale uitzondering die kan worden opgevangen door toepassingscodecatch, maar opnieuw wordt gegenereerd aan het einde van het ResetAbort blok, tenzij aangeroepen. ResetAbort annuleert de aanvraag om af te breken en voorkomt dat de ThreadAbortException thread wordt beëindigd. Niet-uitgevoerde finally blokken worden uitgevoerd voordat de thread wordt afgebroken.

Note

Wanneer een thread zichzelf aanroept Abort , is het effect vergelijkbaar met het genereren van een uitzondering; het ThreadAbortException gebeurt onmiddellijk en het resultaat is voorspelbaar. Als de ene thread echter een andere thread aanroept Abort , onderbreekt het afbreken de code die wordt uitgevoerd. Er is ook een kans dat een statische constructor kan worden afgebroken. In zeldzame gevallen kan dit voorkomen dat exemplaren van die klasse worden gemaakt in dat toepassingsdomein.

De thread wordt niet gegarandeerd onmiddellijk afgebroken of helemaal niet. Deze situatie kan optreden als een thread een niet-gebonden hoeveelheid berekeningen uitvoert in de finally blokken die worden aangeroepen als onderdeel van de afgebroken procedure, waardoor het afbreken voor onbepaalde tijd wordt vertraagd. Als u wilt wachten totdat een thread is afgebroken, kunt u de Join methode in de thread aanroepen nadat de Abort methode is aangeroepen, maar er is geen garantie dat de wachttijd wordt beëindigd.

Note

De thread die aanroept Abort , kan blokkeren als de thread die wordt afgebroken zich in een beveiligd codegebied bevindt, zoals een catch blok, finally blok of beperkte uitvoeringsregio. Als de thread die aanroept Abort een vergrendeling bevat die nodig is voor de afgebroken thread, kan er een impasse optreden.

Als Abort een thread wordt aangeroepen die niet is gestart, wordt de thread afgebroken wanneer Start deze wordt aangeroepen. Als Abort een thread wordt aangeroepen die is geblokkeerd of slaapt, wordt de thread onderbroken en vervolgens afgebroken.

Als Abort een thread wordt aangeroepen die is onderbroken, wordt er een ThreadStateException gegenereerd in de thread die wordt aangeroepen Aborten AbortRequested wordt toegevoegd aan de eigenschap van de ThreadState thread die wordt afgebroken. Een ThreadAbortException wordt pas in de onderbroken thread gegooid als Resume deze wordt aangeroepen.

Als Abort een beheerde thread wordt aangeroepen terwijl er onbeheerde code wordt uitgevoerd, wordt er pas een ThreadAbortException gegenereerd wanneer de thread terugkeert naar beheerde code.

Als er twee aanroepen tegelijk moeten Abort worden uitgevoerd, is het mogelijk dat één oproep de statusgegevens en de andere aanroep instelt om de Abortuit te voeren. Een toepassing kan deze situatie echter niet detecteren.

Nadat Abort deze is aangeroepen op een thread, bevat AbortRequestedde status van de thread . Nadat de thread is beëindigd als gevolg van een geslaagde aanroep, Abortwordt de status van de thread gewijzigd in Stopped. Met voldoende machtigingen kan een thread die het doel is van een Abort thread het afbreken annuleren met behulp van de ResetAbort methode. Zie de klasse voor een voorbeeld waarin het aanroepen van de ResetAbort methode ThreadAbortException wordt gedemonstreert.

Zie ook

Van toepassing op

Abort(Object)

Bron:
Thread.cs
Bron:
Thread.cs
Bron:
Thread.cs
Bron:
Thread.cs
Bron:
Thread.cs

Let op

Thread.Abort is not supported and throws PlatformNotSupportedException.

Hiermee wordt een ThreadAbortException in de thread gegenereerd waarop deze wordt aangeroepen, om te beginnen met het beëindigen van de thread, terwijl ook uitzonderingsinformatie over de beëindiging van de thread wordt verstrekt. Als u deze methode aanroept, wordt de thread meestal beëindigd.

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)

Parameters

stateInfo
Object

Een object dat toepassingsspecifieke informatie bevat, zoals de status, die kan worden gebruikt door de thread die wordt afgebroken.

Kenmerken

Uitzonderingen

.NET Core en .NET 5+ alleen: in alle gevallen.

De beller heeft niet de vereiste machtiging.

De thread die wordt afgebroken, wordt momenteel opgeschort.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe u informatie doorgeeft aan een thread die wordt afgebroken.

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

Opmerkingen

Deze methode is verouderd. In .NET 5- en latere versies produceert het aanroepen van deze methode een waarschuwing voor compilatietijd. Deze methode genereert een PlatformNotSupportedException tijdens runtime op .NET 5 en hoger en .NET Core.

Wanneer deze methode wordt aangeroepen op een thread, genereert het systeem een ThreadAbortException in de thread om deze af te breken. ThreadAbortExceptionis een speciale uitzondering die kan worden opgevangen door toepassingscodecatch, maar opnieuw wordt gegenereerd aan het einde van het ResetAbort blok, tenzij aangeroepen. ResetAbort annuleert de aanvraag om af te breken en voorkomt dat de ThreadAbortException thread wordt beëindigd. Niet-uitgevoerde finally blokken worden uitgevoerd voordat de thread wordt afgebroken.

Note

Wanneer een thread zichzelf aanroept Abort , is het effect vergelijkbaar met het genereren van een uitzondering; het ThreadAbortException gebeurt onmiddellijk en het resultaat is voorspelbaar. Als de ene thread echter een andere thread aanroept Abort , onderbreekt het afbreken de code die wordt uitgevoerd. Er is een kans dat een statische constructor kan worden afgebroken. In zeldzame gevallen kan dit voorkomen dat exemplaren van die klasse worden gemaakt in dat toepassingsdomein.

De thread wordt niet gegarandeerd onmiddellijk afgebroken of helemaal niet. Deze situatie kan optreden als een thread een niet-gebonden hoeveelheid berekeningen uitvoert in de finally blokken die worden aangeroepen als onderdeel van de afgebroken procedure, waardoor het afbreken voor onbepaalde tijd wordt vertraagd. Als u wilt wachten totdat een thread is afgebroken, kunt u de Join methode op de thread aanroepen nadat de Abort methode is aangeroepen, maar er is geen garantie dat de wachttijd wordt beëindigd.

Note

De thread die aanroept Abort , kan blokkeren als de thread die wordt afgebroken zich in een beveiligd codegebied bevindt, zoals een catch blok, finally blok of beperkte uitvoeringsregio. Als de thread die aanroept Abort een vergrendeling bevat die nodig is voor de afgebroken thread, kan er een impasse optreden.

Als Abort een thread wordt aangeroepen die niet is gestart, wordt de thread afgebroken wanneer Start deze wordt aangeroepen. Als Abort een thread wordt aangeroepen die is geblokkeerd of slaapt, wordt de thread onderbroken en vervolgens afgebroken.

Als Abort een thread wordt aangeroepen die is onderbroken, wordt er een ThreadStateException gegenereerd in de thread die wordt aangeroepen Aborten AbortRequested wordt toegevoegd aan de eigenschap van de ThreadState thread die wordt afgebroken. Een ThreadAbortException wordt pas in de onderbroken thread gegooid als Resume deze wordt aangeroepen.

Als Abort een beheerde thread wordt aangeroepen terwijl er onbeheerde code wordt uitgevoerd, wordt er pas een ThreadAbortException gegenereerd wanneer de thread terugkeert naar beheerde code.

Als er twee aanroepen tegelijk moeten Abort worden uitgevoerd, is het mogelijk dat één oproep de statusgegevens en de andere aanroep instelt om de Abortuit te voeren. Een toepassing kan deze situatie echter niet detecteren.

Nadat Abort deze is aangeroepen op een thread, bevat AbortRequestedde status van de thread . Nadat de thread is beëindigd als gevolg van een geslaagde aanroep, Abortwordt de status van de thread gewijzigd in Stopped. Met voldoende machtigingen kan een thread die het doel is van een Abort thread het afbreken annuleren met behulp van de ResetAbort methode. Zie de klasse voor een voorbeeld waarin het aanroepen van de ResetAbort methode ThreadAbortException wordt gedemonstreert.

Zie ook

Van toepassing op