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 eine ThreadAbortException im Thread aus, für den der Aufruf erfolgte, um das Beenden des Threads zu beginnen. Durch den Aufruf dieser Methode wird der Thread i. d. R. beendet.
Überlädt
Abort() |
Veraltet.
Löst eine ThreadAbortException im Thread aus, für den der Aufruf erfolgte, um das Beenden des Threads zu beginnen. Durch den Aufruf dieser Methode wird der Thread i. d. R. beendet. |
Abort(Object) |
Veraltet.
Löst eine ThreadAbortException im Thread aus, für den der Aufruf erfolgte, um das Beenden des Threads zu beginnen. Gleichzeitig werden Ausnahmeinformationen über das Beenden des Threads bereitgestellt. Durch den Aufruf dieser Methode wird der Thread i. d. R. beendet. |
Hinweise
Wichtig
Die Thread.Abort
-Methode sollte mit Vorsicht verwendet werden. Insbesondere wenn Sie ihn aufrufen, um einen anderen Thread als den aktuellen Thread zu abbrechen, wissen Sie nicht, welcher Code ausgeführt wurde oder nicht ausgeführt wurde, wenn ThreadAbortException ausgelöst wird. Sie können sich auch nicht sicher sein, ob es sich um den Zustand Ihrer Anwendung oder um einen Anwendungs- und Benutzerzustand handeln kann, für deren Beibehaltung sie verantwortlich ist. Ein Aufruf von Thread.Abort
kann z. B. die Ausführung statischer Konstruktoren oder die Freigabe nicht verwalteter Ressourcen verhindern.
Abort()
Achtung
Thread.Abort is not supported and throws PlatformNotSupportedException.
Löst eine ThreadAbortException im Thread aus, für den der Aufruf erfolgte, um das Beenden des Threads zu beginnen. Durch den Aufruf dieser Methode wird der Thread i. d. R. 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 und höher: In allen Fällen.
Der Aufrufer verfügt nicht über die erforderliche Berechtigung.
Der abgebrochene Thread ist derzeit angehalten.
Hinweise
Diese Methode ist veraltet. In .NET 5 und höher erzeugt der Aufruf dieser Methode eine Kompilierzeitwarnung. Diese Methode löst zur Laufzeit unter .NET 5 und höher und PlatformNotSupportedException .NET Core eine aus.
Wenn diese Methode für einen Thread aufgerufen wird, löst das System eine im Thread aus, ThreadAbortException um sie zu abbrechen. ThreadAbortException
ist eine spezielle Ausnahme, die vom Anwendungscode erfasst werden kann, aber am Ende des Blocks erneut ausgelöst wird, es sei catch
ResetAbort denn, wird aufgerufen. ResetAbort
bricht die Abbruchanforderung ab und verhindert, ThreadAbortException
dass den Thread beendet. Nicht ausgeführte finally
Blöcke werden ausgeführt, bevor der Thread abgebrochen wird.
Hinweis
Wenn ein Thread für sich selbst aufruft, ähnelt der Effekt dem Auslösen einer Ausnahme. der tritt sofort auf, und das Ergebnis Abort
ThreadAbortException ist vorhersagbar. Wenn jedoch ein Thread in einem anderen Thread aufruft, unterbricht Abort
der Abbruch den ausgeführten Code. Es besteht auch die Möglichkeit, dass ein statischer Konstruktor abgebrochen wird. In seltenen Fällen kann dies verhindern, dass Instanzen dieser Klasse in dieser Anwendungsdomäne erstellt werden. In den .NET Framework Versionen 1.0 und 1.1 besteht die Möglichkeit, dass der Thread abgebrochen wird, während ein Block ausgeführt wird. In diesem Fall wird der Block finally
finally
abgebrochen.
Es ist nicht garantiert, dass der Thread sofort oder überhaupt abgebrochen wird. Diese Situation kann auftreten, wenn ein Thread eine unbegrenzte Menge an Berechnungen in den Blöcken vorträgt, die als Teil der Abbruchprozedur aufgerufen werden, wodurch der Abbruch unbegrenzt finally
verzögert wird. Um zu warten, bis ein Thread abgebrochen wurde, können Sie die -Methode für den Thread aufrufen, nachdem Sie die -Methode aufgerufen haben. Es gibt jedoch keine Garantie, dass der Join Abort Warteaufruf beendet wird.
Hinweis
Der Thread, der aufruft, kann blockieren, wenn sich der abgebrochene Thread in einem geschützten Codebereich befindet, z. B. einem Block, Block oder Abort catch
finally
eingeschränkten Ausführungsbereich. Wenn der Thread, der aufruft, eine Sperre enthält, die für den abgebrochenen Thread erforderlich Abort ist, kann ein Deadlock auftreten.
Wenn für einen Thread aufgerufen wird, der nicht gestartet wurde, wird der Thread Abort
abgebrochen, wenn Start aufgerufen wird. Wenn für einen Thread aufgerufen wird, der blockiert ist oder sich im In-/Aus-Befindet, wird der Thread unterbrochen und Abort
dann abgebrochen.
Wenn für einen angehaltenen Thread aufgerufen wird, wird in dem Thread ausgelöst, der aufgerufen hat, und der -Eigenschaft des abgebrochenen Abort
ThreadStateException Threads Abort AbortRequested ThreadState hinzugefügt. Eine ThreadAbortException wird im angehaltenen Thread erst ausgelöst, wenn Resume aufgerufen wird.
Wenn für einen verwalteten Thread aufgerufen wird, während nicht verwalteter Code ausgeführt wird, wird erst ausgelöst, wenn der Thread zu verwaltetem Abort
ThreadAbortException
Code zurückkehrt.
Wenn zwei Aufrufe gleichzeitig ausgeführt werden, ist es möglich, dass ein Aufruf die Zustandsinformationen und der andere aufruft, Abort
um Abort
auszuführen. Eine Anwendung kann diese Situation jedoch nicht erkennen.
Nachdem Abort
für einen Thread aufgerufen wurde, enthält der Zustand des Threads AbortRequested . Nachdem der Thread aufgrund eines erfolgreichen Aufrufs von beendet wurde, wird der Zustand des Threads Abort
in Stopped geändert. Mit ausreichenden Berechtigungen kann ein Thread, der das Ziel eines ist, den Abort
Abbruch mithilfe der -Methode ResetAbort
abbrechen. Ein Beispiel, das das Aufrufen der -Methode ResetAbort
veranschaulicht, finden Sie in der ThreadAbortException
-Klasse.
Siehe auch
- ThreadAbortException
- Aborted
- AbortRequested
- Threads und Threading
- Verwenden von Threads und Threading
- Zerstören von Threads
Gilt für
Abort(Object)
Achtung
Thread.Abort is not supported and throws PlatformNotSupportedException.
Löst eine ThreadAbortException im Thread aus, für den der Aufruf erfolgte, um das Beenden des Threads zu beginnen. Gleichzeitig werden Ausnahmeinformationen über das Beenden des Threads bereitgestellt. Durch den Aufruf dieser Methode wird der Thread i. d. R. 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. über den Zustand), die vom abgebrochenen Thread verwendet werden können.
- Attribute
Ausnahmen
Nur .NET Core und .NET 5 und höher: In allen Fällen.
Der Aufrufer verfügt nicht über die erforderliche Berechtigung.
Der abgebrochene Thread ist derzeit angehalten.
Beispiele
Das folgende Codebeispiel zeigt, wie Informationen an einen Thread übergeben werden, der abgebrochen wird.
using namespace System;
using namespace System::Threading;
ref class Test
{
private:
Test(){}
public:
static void TestMethod()
{
try
{
while ( true )
{
Console::WriteLine( "New thread running." );
Thread::Sleep( 1000 );
}
}
catch ( ThreadAbortException^ abortException )
{
Console::WriteLine( dynamic_cast<String^>(abortException->ExceptionState) );
}
}
};
int main()
{
Thread^ newThread = gcnew Thread( gcnew ThreadStart( &Test::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." );
}
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);
}
}
}
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öher erzeugt der Aufruf dieser Methode eine Kompilierzeitwarnung. Diese Methode löst zur Laufzeit unter .NET 5 und höher und PlatformNotSupportedException .NET Core eine aus.
Wenn diese Methode für einen Thread aufgerufen wird, löst das System eine im Thread aus, ThreadAbortException um sie zu abbrechen. ThreadAbortException
ist eine spezielle Ausnahme, die vom Anwendungscode erfasst werden kann, aber am Ende des Blocks erneut ausgelöst wird, es sei catch
ResetAbort denn, wird aufgerufen. ResetAbort
bricht die Abbruchanforderung ab und verhindert, ThreadAbortException
dass den Thread beendet. Nicht ausgeführte finally
Blöcke werden ausgeführt, bevor der Thread abgebrochen wird.
Hinweis
Wenn ein Thread für sich selbst aufruft, ähnelt der Effekt dem Auslösen einer Ausnahme. der tritt sofort auf, und das Ergebnis Abort
ThreadAbortException ist vorhersagbar. Wenn jedoch ein Thread in einem anderen Thread aufruft, unterbricht Abort
der Abbruch den ausgeführten Code. Es besteht die Möglichkeit, dass ein statischer Konstruktor abgebrochen wird. In seltenen Fällen kann dies verhindern, dass Instanzen dieser Klasse in dieser Anwendungsdomäne erstellt werden. In den .NET Framework Versionen 1.0 und 1.1 besteht die Möglichkeit, dass der Thread abgebrochen wird, während ein Block ausgeführt wird. In diesem Fall wird der Block finally
finally
abgebrochen.
Es ist nicht garantiert, dass der Thread sofort oder überhaupt abgebrochen wird. Diese Situation kann auftreten, wenn ein Thread eine unbegrenzte Menge an Berechnungen in den Blöcken vorträgt, die als Teil der Abbruchprozedur aufgerufen werden, wodurch der Abbruch unbegrenzt finally
verzögert wird. Um zu warten, bis ein Thread abgebrochen wurde, können Sie die -Methode für den Thread aufrufen, nachdem Sie die -Methode aufgerufen haben. Es gibt jedoch keine Garantie, dass der Join Abort Warteaufruf beendet wird.
Hinweis
Der Thread, der aufruft, kann blockieren, wenn sich der abgebrochene Thread in einem geschützten Codebereich befindet, z. B. einem Block, Block oder Abort catch
finally
eingeschränkten Ausführungsbereich. Wenn der Thread, der aufruft, eine Sperre enthält, die für den abgebrochenen Thread erforderlich Abort ist, kann ein Deadlock auftreten.
Wenn für einen Thread aufgerufen wird, der nicht gestartet wurde, wird der Thread Abort
abgebrochen, wenn Start aufgerufen wird. Wenn für einen Thread aufgerufen wird, der blockiert ist oder sich im In-/Aus-Befindet, wird der Thread unterbrochen und Abort
dann abgebrochen.
Wenn für einen angehaltenen Thread aufgerufen wird, wird in dem Thread ausgelöst, der aufgerufen hat, und der -Eigenschaft des abgebrochenen Abort
ThreadStateException Threads Abort AbortRequested ThreadState hinzugefügt. Eine ThreadAbortException wird im angehaltenen Thread erst ausgelöst, wenn Resume aufgerufen wird.
Wenn für einen verwalteten Thread aufgerufen wird, während nicht verwalteter Code ausgeführt wird, wird erst ausgelöst, wenn der Thread zu verwaltetem Abort
ThreadAbortException
Code zurückkehrt.
Wenn zwei Aufrufe gleichzeitig ausgeführt werden, ist es möglich, dass ein Aufruf die Zustandsinformationen und der andere aufruft, Abort
um Abort
auszuführen. Eine Anwendung kann diese Situation jedoch nicht erkennen.
Nachdem Abort
für einen Thread aufgerufen wurde, enthält der Zustand des Threads AbortRequested . Nachdem der Thread aufgrund eines erfolgreichen Aufrufs von beendet wurde, wird der Zustand des Threads Abort
in Stopped geändert. Mit ausreichenden Berechtigungen kann ein Thread, der das Ziel eines ist, den Abort
Abbruch mithilfe der -Methode ResetAbort
abbrechen. Ein Beispiel, das das Aufrufen der -Methode ResetAbort
veranschaulicht, finden Sie in der ThreadAbortException
-Klasse.
Siehe auch
- ThreadAbortException
- Aborted
- AbortRequested
- Threads und Threading
- Verwenden von Threads und Threading
- Zerstören von Threads