Thread.Abort Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Löst einen ThreadAbortException Inthread aus, für den er aufgerufen wird, um den Prozess des Beendens des Threads zu beginnen. Durch Aufrufen dieser Methode wird der Thread in der Regel beendet.
Überlädt
| Name | Beschreibung |
|---|---|
| Abort() |
Veraltet.
Löst einen ThreadAbortException Inthread aus, in dem er aufgerufen wird, um den Prozess des Beendens des Threads zu beginnen. Durch Aufrufen dieser Methode wird der Thread in der Regel beendet. |
| Abort(Object) |
Veraltet.
Löst einen ThreadAbortException Inthread aus, für den er aufgerufen wird, um den Prozess des Beendens des Threads zu beginnen und gleichzeitig Ausnahmeinformationen zum Beenden des Threads bereitzustellen. Durch Aufrufen dieser Methode wird der Thread in der Regel beendet. |
Hinweise
Von Bedeutung
Verwenden Sie die Thread.Abort Methode mit Vorsicht. Insbesondere wenn Sie ihn aufrufen, um einen anderen Thread als den aktuellen Thread abzubrechen, wissen Sie nicht, welcher Code ausgeführt wurde oder nicht ausgeführt werden konnte, wenn der ThreadAbortException Thread ausgelöst wird. Sie können auch nicht sicher sein, in welchem Zustand sich Ihre Anwendung oder irgendein Anwendungs- und Benutzerzustand befindet, für dessen Erhaltung sie verantwortlich ist. Beispielsweise kann das Aufrufen Thread.Abort die Ausführung statischer Konstruktoren oder die Veröffentlichung von verwalteten oder nicht verwalteten Ressourcen verhindern.
Abort()
- Quelle:
- Thread.cs
- Quelle:
- Thread.cs
- Quelle:
- Thread.cs
- Quelle:
- Thread.cs
- Quelle:
- Thread.cs
Achtung
Thread.Abort is not supported and throws PlatformNotSupportedException.
Löst einen ThreadAbortException Inthread aus, in dem er aufgerufen wird, um den Prozess des Beendens des Threads zu beginnen. Durch Aufrufen dieser Methode wird der Thread in der Regel beendet.
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 ()
- Attribute
Ausnahmen
Nur .NET Core und .NET 5+ : In allen Fällen.
Der Aufrufer verfügt nicht über die erforderliche Berechtigung.
Der thread, der abgebrochen wird, wird derzeit angehalten.
Hinweise
Diese Methode ist veraltet. In .NET 5 und höheren Versionen erzeugt das Aufrufen dieser Methode eine Kompilierungszeitwarnung. Diese Methode löst zur Laufzeit auf .NET 5 und höher und .NET Core ein PlatformNotSupportedException .
Wenn diese Methode in einem Thread aufgerufen wird, löst das System einen ThreadAbortException in dem Thread aus, um sie abzubrechen.
ThreadAbortException ist eine spezielle Ausnahme, die vom Anwendungscode abgefangen werden kann, aber am Ende des catch Blocks erneut ausgelöst wird, es sei denn ResetAbort , sie wird aufgerufen.
ResetAbort bricht die Abbruchanforderung ab und verhindert, dass der ThreadAbortException Thread beendet wird. Nicht ausgeführte finally Blöcke werden ausgeführt, bevor der Thread abgebrochen wird.
Hinweis
Wenn ein Thread sich selbst aufruft Abort , ähnelt der Effekt dem Auslösen einer Ausnahme. Dies ThreadAbortException geschieht sofort, und das Ergebnis ist vorhersagbar. Wenn jedoch ein Thread einen anderen Thread aufruft Abort , unterbricht der Abbruch den ausgeführten Code. Es besteht auch die Möglichkeit, dass ein statischer Konstruktor abgebrochen werden kann. In seltenen Fällen kann dies verhindern, dass Instanzen dieser Klasse in dieser Anwendungsdomäne erstellt werden.
Der Thread wird nicht garantiert sofort oder gar abgebrochen. Diese Situation kann auftreten, wenn ein Thread eine ungebundene Berechnungsmenge in den finally Blöcken durchführt, die als Teil der Abortprozedur aufgerufen werden, wodurch der Abbruch unbegrenzt verzögert wird. Um zu warten, bis ein Thread abgebrochen wurde, können Sie die Join Methode für den Thread aufrufen, nachdem die Abort Methode aufgerufen wurde, aber es gibt keine Garantie, dass die Wartezeit endet.
Hinweis
Der Thread, der aufruftAbort, kann blockieren, wenn sich der abgebrochene Thread in einem geschützten Codebereich befindet, z. B. einen Block, einen Block, finally einen catch Block oder einen eingeschränkten Ausführungsbereich. Wenn der Thread, der eine Sperre aufruft Abort , die der abgebrochene Thread erfordert, kann ein Deadlock auftreten.
Wenn Abort für einen Thread aufgerufen wird, der nicht gestartet wurde, wird der Thread abgebrochen, wenn Start er aufgerufen wird. Wenn Abort für einen thread aufgerufen wird, der blockiert oder schlafend ist, wird der Thread unterbrochen und dann abgebrochen.
Wenn Abort für einen angehaltenen Thread aufgerufen wird, wird ein ThreadStateException Thread ausgelöst, der aufgerufen Abortwird, und AbortRequested der Eigenschaft des abgebrochenen Threads hinzugefügt ThreadState wird. A ThreadAbortException wird erst im angehaltenen Thread ausgelöst, wenn Resume er aufgerufen wird.
Wenn Abort ein verwalteter Thread aufgerufen wird, während er nicht verwalteten Code ausführt, wird ein ThreadAbortException Fehler erst ausgelöst, wenn der Thread zum verwalteten Code zurückkehrt.
Wenn zwei Aufrufe Abort gleichzeitig eingehen, ist es möglich, dass ein Aufruf die Statusinformationen und den anderen Aufruf zum Ausführen des AbortZustands festlegen kann. Eine Anwendung kann diese Situation jedoch nicht erkennen.
Nachdem Abort der Thread auf einem Thread aufgerufen wurde, enthält AbortRequestedder Zustand des Threads . Nachdem der Thread aufgrund eines erfolgreichen Aufrufs Abortbeendet wurde, wird der Status des Threads in Stopped" geändert. Mit ausreichenden Berechtigungen kann ein Thread, der das Ziel eines Abort Abbruchs ist, mithilfe der ResetAbort Methode abbrechen. Ein Beispiel, das das Aufrufen der ResetAbort Methode veranschaulicht, finden Sie in der ThreadAbortException Klasse.
Weitere Informationen
- ThreadAbortException
- Aborted
- AbortRequested
- Threads and Threading (Threads und Threading)
- Verwenden von Threads und Threading
- Löschen von Threads
Gilt für:
Abort(Object)
- Quelle:
- Thread.cs
- Quelle:
- Thread.cs
- Quelle:
- Thread.cs
- Quelle:
- Thread.cs
- Quelle:
- Thread.cs
Achtung
Thread.Abort is not supported and throws PlatformNotSupportedException.
Löst einen ThreadAbortException Inthread aus, für den er aufgerufen wird, um den Prozess des Beendens des Threads zu beginnen und gleichzeitig Ausnahmeinformationen zum Beenden des Threads bereitzustellen. Durch Aufrufen dieser Methode wird der Thread in der Regel beendet.
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)
Parameter
- stateInfo
- Object
Ein Objekt, das anwendungsspezifische Informationen enthält, z. B. den Zustand, der vom abgebrochenen Thread verwendet werden kann.
- Attribute
Ausnahmen
Nur .NET Core und .NET 5+ : In allen Fällen.
Der Aufrufer verfügt nicht über die erforderliche Berechtigung.
Der thread, der abgebrochen wird, wird derzeit angehalten.
Beispiele
Das folgende Codebeispiel zeigt, wie Informationen an einen thread übergeben werden, der abgebrochen wird.
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
Hinweise
Diese Methode ist veraltet. In .NET 5 und höheren Versionen erzeugt das Aufrufen dieser Methode eine Kompilierungszeitwarnung. Diese Methode löst zur Laufzeit auf .NET 5 und höher und .NET Core ein PlatformNotSupportedException .
Wenn diese Methode in einem Thread aufgerufen wird, löst das System einen ThreadAbortException in dem Thread aus, um sie abzubrechen.
ThreadAbortException ist eine spezielle Ausnahme, die vom Anwendungscode abgefangen werden kann, aber am Ende des catch Blocks erneut ausgelöst wird, es sei denn ResetAbort , sie wird aufgerufen.
ResetAbort bricht die Abbruchanforderung ab und verhindert, dass der ThreadAbortException Thread beendet wird. Nicht ausgeführte finally Blöcke werden ausgeführt, bevor der Thread abgebrochen wird.
Hinweis
Wenn ein Thread sich selbst aufruft Abort , ähnelt der Effekt dem Auslösen einer Ausnahme. Dies ThreadAbortException geschieht sofort, und das Ergebnis ist vorhersagbar. Wenn jedoch ein Thread einen anderen Thread aufruft Abort , unterbricht der Abbruch den ausgeführten Code. Es besteht die Möglichkeit, dass ein statischer Konstruktor abgebrochen werden kann. In seltenen Fällen kann dies verhindern, dass Instanzen dieser Klasse in dieser Anwendungsdomäne erstellt werden.
Der Thread wird nicht garantiert sofort oder gar abgebrochen. Diese Situation kann auftreten, wenn ein Thread eine ungebundene Berechnungsmenge in den finally Blöcken durchführt, die als Teil der Abortprozedur aufgerufen werden, wodurch der Abbruch unbegrenzt verzögert wird. Um zu warten, bis ein Thread abgebrochen wurde, können Sie die Join Methode für den Thread aufrufen, nachdem Sie die Abort Methode aufgerufen haben, aber es gibt keine Garantie, dass die Wartezeit beendet wird.
Hinweis
Der Thread, der aufruftAbort, kann blockieren, wenn sich der abgebrochene Thread in einem geschützten Codebereich befindet, z. B. einen Block, einen Block, finally einen catch Block oder einen eingeschränkten Ausführungsbereich. Wenn der Thread, der eine Sperre aufruft Abort , die der abgebrochene Thread erfordert, kann ein Deadlock auftreten.
Wenn Abort für einen Thread aufgerufen wird, der nicht gestartet wurde, wird der Thread abgebrochen, wenn Start er aufgerufen wird. Wenn Abort für einen thread aufgerufen wird, der blockiert oder schlafend ist, wird der Thread unterbrochen und dann abgebrochen.
Wenn Abort für einen angehaltenen Thread aufgerufen wird, wird ein ThreadStateException Thread ausgelöst, der aufgerufen Abortwird, und AbortRequested der Eigenschaft des abgebrochenen Threads hinzugefügt ThreadState wird. A ThreadAbortException wird erst im angehaltenen Thread ausgelöst, wenn Resume er aufgerufen wird.
Wenn Abort ein verwalteter Thread aufgerufen wird, während er nicht verwalteten Code ausführt, wird ein ThreadAbortException Fehler erst ausgelöst, wenn der Thread zum verwalteten Code zurückkehrt.
Wenn zwei Aufrufe Abort gleichzeitig eingehen, ist es möglich, dass ein Aufruf die Statusinformationen und den anderen Aufruf zum Ausführen des AbortZustands festlegen kann. Eine Anwendung kann diese Situation jedoch nicht erkennen.
Nachdem Abort der Thread auf einem Thread aufgerufen wurde, enthält AbortRequestedder Zustand des Threads . Nachdem der Thread aufgrund eines erfolgreichen Aufrufs Abortbeendet wurde, wird der Status des Threads in Stopped" geändert. Mit ausreichenden Berechtigungen kann ein Thread, der das Ziel eines Abort Abbruchs ist, mithilfe der ResetAbort Methode abbrechen. Ein Beispiel, das das Aufrufen der ResetAbort Methode veranschaulicht, finden Sie in der ThreadAbortException Klasse.
Weitere Informationen
- ThreadAbortException
- Aborted
- AbortRequested
- Threads and Threading (Threads und Threading)
- Verwenden von Threads und Threading
- Löschen von Threads