Exportieren (0) Drucken
Alle erweitern
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

Thread.Abort-Methode (Object)

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.

Namespace:  System.Threading
Assembly:  mscorlib (in mscorlib.dll)

[SecurityPermissionAttribute(SecurityAction.Demand, ControlThread = true)]
public void Abort(
	Object stateInfo
)

Parameter

stateInfo
Typ: System.Object
Ein Objekt, das anwendungsspezifische Informationen enthält (z. B. über den Zustand), die vom abgebrochenen Thread verwendet werden können.

AusnahmeBedingung
SecurityException

Der Aufrufer verfügt nicht über die erforderliche Berechtigung.

ThreadStateException

Der Thread, der abgebrochen werden soll, wurde angehalten.

Wenn diese Methode für einen Thread aufgerufen wird, löst das System im Thread eine ThreadAbortException aus, um ihn abzubrechen. ThreadAbortException ist eine besondere Ausnahme, die von Anwendungscode abgefangen werden kann, aber am Ende des catch-Blocks erneut ausgelöst wird, außer wenn ResetAbort aufgerufen wird. ResetAbort bricht die Abbruchanforderung ab und verhindert, dass der ThreadAbortException den Thread beendet. Nicht ausgeführte finally-Blöcke werden vor dem Abbruch des Threads ausgeführt.

HinweisHinweis

Wenn ein Thread Abort für sich selbst aufruft, entspricht dies dem Auslösen einer Ausnahme. Die ThreadAbortException wird sofort ausgeführt, und das Ergebnis ist vorhersehbar. Wenn ein Thread jedoch Abort für einen anderen Thread aufruft, unterbricht der Abbruch allen ausgeführten Code. Ein statischer Konstruktor wird möglicherweise ebenfalls abgebrochen. In seltenen Fällen wird so das Erstellen von Instanzen dieser Klasse in der Anwendungsdomäne verhindert. In .NET Framework, Version 1.0 und 1.1, besteht die Möglichkeit, dass der Thread während des Ausführens eines finally-Blocks abgebrochen wird. In diesem Fall wird der finally-Block abgebrochen.

Der Thread wird, wenn überhaupt, nicht unbedingt sofort abgebrochen. Dies kann der Fall sein, wenn ein Thread eine unbegrenzte Berechnung in den finally-Blöcken ausführt, die im Rahmen des Abbruchvorgangs aufgerufen wurden, sodass der Abbruch um einen unbestimmten Zeitraum verzögert wird. Um zu warten, bis ein Thread abgebrochen wurde, können Sie nach dem Aufruf der Abort-Methode die Join-Methode für den Thread aufrufen, doch kann dabei nicht gewährleistet werden, dass der Wartevorgang beendet wird.

HinweisHinweis

Der Thread, der Abort aufruft, könnte blockieren, wenn sich der Thread, der abgebrochen wird, in einem geschützten Bereich des Codes befindet, z. B in einem catch-Block, einem finally-Block oder in einem eingeschränkten Ausführungsbereich. Wenn der Thread, der Abort aufruft, eine Sperre hält, die der abgebrochene Thread erfordert, kann ein Deadlock auftreten.

Beim Aufruf von Abort für einen nicht gestarteten Thread wird der Thread abgebrochen, wenn Start aufgerufen wird. Beim Aufruf von Abort für einen blockierten Thread oder einen Thread im Ruhezustand wird der Thread unterbrochen und dann abgebrochen.

Wenn Abort für einen angehaltenen Thread aufgerufen wird, wird in dem Thread, der Abort aufruft, eine ThreadStateException ausgelöst, und AbortRequested wird der ThreadState-Eigenschaft des abgebrochenen Threads hinzugefügt. Eine ThreadAbortException wird im angehaltenen Thread erst ausgelöst, nachdem Resume aufgerufen wurde.

Wenn Abort für einen verwalteten Thread aufgerufen wird, während dieser nicht verwalteten Code ausführt, wird die ThreadAbortException erst dann ausgelöst, wenn der Thread zu einem verwalteten Code zurückkehrt.

Wenn zwei Aufrufe von Abort gleichzeitig ausgeführt werden, ist es möglich, dass durch den einen Aufruf die Zustandsinformationen festgelegt werden und durch den anderen das eigentliche Abort ausgeführt wird. Eine Anwendung kann diese Situation jedoch nicht erkennen.

Nach dem Aufruf von Abort für einen Thread enthält der Zustand des Threads AbortRequested. Wenn der Thread nach einem erfolgreichen Aufruf von Abort beendet wurde, wird der Zustand des Threads in Stopped geändert. Mit den entsprechenden Berechtigungen kann ein Thread, der das Ziel eines Abort ist, diesen Vorgang unter Verwendung der ResetAbort-Methode abbrechen. Ein Beispiel, in dem der Aufruf der ResetAbort-Methode veranschaulicht wird, finden Sie unter der ThreadAbortException-Klasse.

Das folgende Codebeispiel veranschaulicht, 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);
        }
    }
}


.NET Framework

Unterstützt in: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

Es werden nicht alle Versionen sämtlicher Plattformen von .NET Framework unterstützt.. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2015 Microsoft