Thread.Abort Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
ThreadAbortException Vyvolá ve vlákně, na kterém je vyvolána, aby zahájil proces ukončení vlákna. Volání této metody obvykle ukončí vlákno.
Přetížení
| Name | Description |
|---|---|
| Abort() |
Zastaralé.
ThreadAbortException Vyvolá ve vlákně, na kterém je vyvolána, aby zahájil proces ukončení vlákna. Volání této metody obvykle ukončí vlákno. |
| Abort(Object) |
Zastaralé.
ThreadAbortException Vyvolá ve vlákně, na kterém je vyvolána, aby zahájil proces ukončení vlákna a zároveň poskytuje informace o výjimce o ukončení vlákna. Volání této metody obvykle ukončí vlákno. |
Poznámky
Důležité
Používejte metodu Thread.Abort s opatrností. Zvlášť když ho zavoláte k přerušení vlákna jiného než aktuálního vlákna, nevíte, jaký kód se spustil nebo se nepodařilo provést při ThreadAbortException vyvolání. Také nemůžete mít jistotu o stavu své aplikace nebo jakékoli aplikace a uživatelského stavu, které má zachovat. Volání Thread.Abort může například zabránit spuštění statických konstruktorů nebo uvolnění spravovaných nebo nespravovaných prostředků.
Abort()
- Zdroj:
- Thread.cs
- Zdroj:
- Thread.cs
- Zdroj:
- Thread.cs
- Zdroj:
- Thread.cs
- Zdroj:
- Thread.cs
Upozornění
Thread.Abort is not supported and throws PlatformNotSupportedException.
ThreadAbortException Vyvolá ve vlákně, na kterém je vyvolána, aby zahájil proces ukončení vlákna. Volání této metody obvykle ukončí vlákno.
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 ()
- Atributy
Výjimky
Pouze .NET Core a .NET 5+ : Ve všech případech.
Volající nemá požadované oprávnění.
Vlákno, které se právě přerušuje, je nyní pozastaveno.
Poznámky
Tato metoda je zastaralá. V rozhraní .NET 5 a novějších verzích vyvolá volání této metody upozornění v době kompilace. Tato metoda vyvolá PlatformNotSupportedException za běhu v .NET 5 a novějších a .NET Core.
Pokud je tato metoda vyvolána ve vlákně, systém vyvolá ThreadAbortException ve vlákně přerušení.
ThreadAbortException je zvláštní výjimka, kterou lze zachytit kódem aplikace, ale je znovu vyvolána na konci catch bloku, pokud ResetAbort není volána.
ResetAbort zruší požadavek na přerušení a zabrání ThreadAbortException ukončení vlákna. Bloky, které nejsou finally provedeny, se spustí před přerušením vlákna.
Poznámka:
Když vlákno volá Abort sám sebe, efekt je podobný vyvolání výjimky; ThreadAbortException k tomu dojde okamžitě a výsledek je předvídatelný. Pokud však jedno vlákno volá Abort v jiném vlákně, přeruší se přerušení jakéhokoli spuštěného kódu. Existuje také šance, že statický konstruktor může být přerušen. Ve výjimečných případech to může bránit vytváření instancí této třídy v této doméně aplikace.
Vlákno není zaručeno okamžité přerušení nebo vůbec. K této situaci může dojít v případě, že vlákno provádí nevázané množství výpočtů v finally blocích, které jsou volána jako součást procedury přerušení, čímž se trvale zpozdí přerušení. Chcete-li počkat na přerušení vlákna, můžete volat Join metodu ve vlákně po volání Abort metody, ale neexistuje žádná záruka, že čekání skončí.
Poznámka:
Vlákno, které volá Abort , může blokovat, pokud je vlákno, které je přerušeno, v chráněné oblasti kódu, jako catch je blok, finally blok nebo omezená oblast provádění. Pokud vlákno, které volá Abort , obsahuje zámek, který přerušované vlákno vyžaduje, může dojít k zablokování.
Pokud Abort je volána ve vlákně, které nebylo spuštěno, vlákno se přeruší při Start zavolání. Pokud Abort je volána na vlákně, které je blokováno nebo je spí, vlákno je přerušeno a poté přerušeno.
Pokud Abort je volána ve vlákně, které bylo pozastaveno, je vyvolána ve vlákně, ThreadStateException které volané Abort, a AbortRequested je přidána do ThreadState vlastnosti vlákna je přerušena. V pozastavené vlákně není vyvolána hodnota A ThreadAbortException , dokud Resume se nevolá.
Pokud Abort je volána ve spravovaném vlákně, když spouští nespravovaný kód, nevyvolá se, ThreadAbortException dokud se vlákno nevrátí do spravovaného kódu.
Pokud dva volání Abort přicházejí současně, je možné, aby jedno volání nastavil informace o stavu a druhé volání ke spuštění Abort. Aplikace však nemůže tuto situaci rozpoznat.
Po Abort vyvolání ve vlákně obsahuje stav vlákna AbortRequested. Po ukončení vlákna v důsledku úspěšného volání Abort, stav vlákna se změní na Stopped. S dostatečnými oprávněními může vlákno, které je cílem objektu, Abort zrušit přerušení pomocí ResetAbort metody. Příklad, který ukazuje volání ResetAbort metody, viz ThreadAbortException třída.
Viz také
- ThreadAbortException
- Aborted
- AbortRequested
- Vlákna a dělení na vlákna
- Použití vláken a vláknování
- Zničení vláken
Platí pro
Abort(Object)
- Zdroj:
- Thread.cs
- Zdroj:
- Thread.cs
- Zdroj:
- Thread.cs
- Zdroj:
- Thread.cs
- Zdroj:
- Thread.cs
Upozornění
Thread.Abort is not supported and throws PlatformNotSupportedException.
ThreadAbortException Vyvolá ve vlákně, na kterém je vyvolána, aby zahájil proces ukončení vlákna a zároveň poskytuje informace o výjimce o ukončení vlákna. Volání této metody obvykle ukončí vlákno.
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)
Parametry
- stateInfo
- Object
Objekt, který obsahuje informace specifické pro aplikaci, například stav, které může vlákno přerušit.
- Atributy
Výjimky
Pouze .NET Core a .NET 5+ : Ve všech případech.
Volající nemá požadované oprávnění.
Vlákno, které se právě přerušuje, je nyní pozastaveno.
Příklady
Následující příklad kódu ukazuje, jak předat informace do vlákna, které je přerušeno.
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
Poznámky
Tato metoda je zastaralá. V rozhraní .NET 5 a novějších verzích vyvolá volání této metody upozornění v době kompilace. Tato metoda vyvolá PlatformNotSupportedException za běhu v .NET 5 a novějších a .NET Core.
Pokud je tato metoda vyvolána ve vlákně, systém vyvolá ThreadAbortException ve vlákně přerušení.
ThreadAbortException je zvláštní výjimka, kterou lze zachytit kódem aplikace, ale je znovu vyvolána na konci catch bloku, pokud ResetAbort není volána.
ResetAbort zruší požadavek na přerušení a zabrání ThreadAbortException ukončení vlákna. Bloky, které nejsou finally provedeny, se spustí před přerušením vlákna.
Poznámka:
Když vlákno volá Abort sám sebe, efekt je podobný vyvolání výjimky; ThreadAbortException k tomu dojde okamžitě a výsledek je předvídatelný. Pokud však jedno vlákno volá Abort v jiném vlákně, přeruší se přerušení jakéhokoli spuštěného kódu. Je možné, že statický konstruktor může být přerušen. Ve výjimečných případech to může bránit vytváření instancí této třídy v této doméně aplikace.
Vlákno není zaručeno okamžité přerušení nebo vůbec. K této situaci může dojít v případě, že vlákno provádí nevázané množství výpočtů v finally blocích, které jsou volána jako součást procedury přerušení, čímž se trvale zpozdí přerušení. Chcete-li počkat na přerušení vlákna, můžete volat Join metodu ve vlákně po volání Abort metody, ale neexistuje žádná záruka, že čekání skončí.
Poznámka:
Vlákno, které volá Abort , může blokovat, pokud je vlákno, které je přerušeno, v chráněné oblasti kódu, jako catch je blok, finally blok nebo omezená oblast provádění. Pokud vlákno, které volá Abort , obsahuje zámek, který přerušované vlákno vyžaduje, může dojít k zablokování.
Pokud Abort je volána ve vlákně, které nebylo spuštěno, vlákno se přeruší při Start zavolání. Pokud Abort je volána na vlákně, které je blokováno nebo je spí, vlákno je přerušeno a poté přerušeno.
Pokud Abort je volána ve vlákně, které bylo pozastaveno, je vyvolána ve vlákně, ThreadStateException které volané Abort, a AbortRequested je přidána do ThreadState vlastnosti vlákna je přerušena. V pozastavené vlákně není vyvolána hodnota A ThreadAbortException , dokud Resume se nevolá.
Pokud Abort je volána ve spravovaném vlákně, když spouští nespravovaný kód, nevyvolá se, ThreadAbortException dokud se vlákno nevrátí do spravovaného kódu.
Pokud dva volání Abort přicházejí současně, je možné, aby jedno volání nastavil informace o stavu a druhé volání ke spuštění Abort. Aplikace však nemůže tuto situaci rozpoznat.
Po Abort vyvolání ve vlákně obsahuje stav vlákna AbortRequested. Po ukončení vlákna v důsledku úspěšného volání Abort, stav vlákna se změní na Stopped. S dostatečnými oprávněními může vlákno, které je cílem objektu, Abort zrušit přerušení pomocí ResetAbort metody. Příklad, který ukazuje volání ResetAbort metody, viz ThreadAbortException třída.
Viz také
- ThreadAbortException
- Aborted
- AbortRequested
- Vlákna a dělení na vlákna
- Použití vláken a vláknování
- Zničení vláken