(0) exportieren 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
Dieser Artikel wurde noch nicht bewertet - Dieses Thema bewerten.

Zerstören von Threads

Mithilfe der Abort-Methode wird ein verwalteter Thread dauerhaft angehalten. Beim Aufruf von Abort löst die Common Language Runtime im Zielthread eine ThreadAbortException aus, die der Zielthread abfangen kann. Weitere Informationen finden Sie unter Thread.Abort.

Hinweis Hinweis

Wenn ein Thread beim Aufruf seiner Abort-Methode nicht verwalteten Code ausführt, wird er von der Laufzeit als ThreadState.AbortRequested markiert. Die Ausnahme wird ausgelöst, wenn der Thread zum verwalteten Code zurückkehrt.

Sobald ein Thread abgebrochen wurde, kann er nicht mehr gestartet werden.

Die Abort-Methode verursacht nicht den sofortigen Abbruch des Threads, da der Zielthread die ThreadAbortException abfangen kann und Code beliebiger Länge in einem finally-Block ausführen kann. Wenn Sie die Beendigung des Threads abwarten müssen, können Sie Thread.Join aufrufen. Thread.Join ist ein blockierender Aufruf, der erst beendet wird, nachdem die Ausführung des Threads tatsächlich beendet wurde oder ein optionales Timeoutintervall abgelaufen ist. Der abgebrochene Thread könnte die ResetAbort-Methode aufrufen oder ungebundene Verarbeitung in einem finally-Block ausführen. Wenn Sie kein Timeout angeben, ist das Ende des Wartevorgangs nicht garantiert.

Threads, die auf einen Aufruf der Thread.Join-Methode warten, können durch andere Threads unterbrochen werden, die Thread.Interrupt aufrufen.

Wenn Sie den Abbruch eines Threads erwarten, weil entweder Abort aus Ihrem eigenen Code aufgerufen wurde oder eine Anwendungsdomäne entladen wurde, in der der Thread ausgeführt wird (AppDomain.Unload beendet Threads mit Thread.Abort), muss der Thread die ThreadAbortException behandeln und die endgültige Verarbeitung in einer finally-Klausel ausführen, wie im folgenden Code dargestellt.

try 
{
    // Code that is executing when the thread is aborted.
} 
catch (ThreadAbortException ex) 
{
    // Clean-up code can go here.
    // If there is no Finally clause, ThreadAbortException is
    // re-thrown by the system at the end of the Catch clause. 
}
// Do not put clean-up code here, because the exception 
// is rethrown at the end of the Finally clause.

Der Bereinigungscode muss sich in der catch-Klausel oder der finally-Klausel befinden, da das System am Ende der finally-Klausel oder am Ende der catch-Klausel, wenn keine finally-Klausel vorhanden ist, erneut eine ThreadAbortException auslöst.

Sie können das erneute Auslösen der Ausnahme durch Aufrufen der Thread.ResetAbort-Methode verhindern. Dies ist jedoch nur sinnvoll, wenn die ThreadAbortException von Ihrem eigenen Code verursacht wurde.

Fanden Sie dies hilfreich?
(1500 verbleibende Zeichen)
Vielen Dank für Ihr Feedback.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft. Alle Rechte vorbehalten.