Thread.Abort Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
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
- ThreadAbortException
- Aborted
- AbortRequested
- Draden en draadprocessen
- Threads en threading gebruiken
- Threads vernietigen
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
- ThreadAbortException
- Aborted
- AbortRequested
- Draden en draadprocessen
- Threads en threading gebruiken
- Threads vernietigen