Freigeben über


Zustände von verwalteten Threads

Durch die Thread.ThreadState-Eigenschaft wird eine Bitmaske bereitgestellt, die den aktuellen Zustand des Threads angibt. Ein Thread befindet sich stets in mindestens einem der möglichen Zustände der ThreadState-Enumeration. Er kann sich aber auch gleichzeitig in mehreren Zuständen befinden.

Wichtiger HinweisWichtig

Der Threadzustand ist nur in einigen Debugszenarios von Interesse.Der Code sollte die Aktivitäten von Threads nie anhand des Threadzustands synchronisieren.

Wenn Sie einen verwalteten Thread erstellen, weist er den Zustand ThreadState.Unstarted auf. Der Thread verbleibt im Zustand Unstarted, bis Sie die Thread.Start-Methode aufrufen, die den Thread in den Zustand Running versetzt, sodass das Betriebssystem s‌eine Ausführung planen kann.

Nicht verwaltete Threads, die in die verwaltete Umgebung eintreten, wurden bereits gestartet. Nach dem Starten eines Threads kann sein Zustand durch eine Reihe von Aktionen geändert werden. In der folgenden Tabelle werden die Aktionen aufgelistet, die eine solche Änderung hervorrufen, sowie die entsprechenden neuen Zustände.

Aktion

Neuer Zustand

Der Konstruktor für die Thread-Klasse wird aufgerufen.

Unstarted

Ein anderer Thread ruft die Thread.Start-Methode für den neuen Thread auf, und der Aufruf kehrt zurück.

HinweisHinweis
Die Start-Methode wird erst beendet, wenn sich der neue Thread im Zustand Running befindet.Es gibt keine Möglichkeit zu ermitteln, wann dies während des Aufrufs von Start erfolgt.

Running

Ein weiterer Thread ruft Thread.Sleep auf.

WaitSleepJoin

Der Thread ruft Monitor.Wait für ein anderes Objekt auf.

WaitSleepJoin

Der Thread ruft Thread.Join für einen anderen Thread auf.

WaitSleepJoin

Ein anderer Thread ruft Thread.Suspend auf.

SuspendRequested

Der Thread reagiert auf eine Thread.Suspend-Anforderung.

Suspended

Ein anderer Thread ruft Thread.Resume auf.

Running

Ein anderer Thread ruft Thread.Abort auf.

AbortRequested

Der Thread reagiert auf ein Thread.Abort.

Aborted, dann Stopped.

Da der Zustand Running den Wert 0 (null) hat, kann kein Bittest zur Ermittlung dieses Zustands durchgeführt werden. Stattdessen kann der folgende Test (in Pseudocode) verwendet werden:

if ((state & (Unstarted | Stopped)) == 0)   // implies Running   

Threads befinden sich oft in mehreren Zuständen gleichzeitig. Wenn beispielsweise ein Thread in einem Monitor.Wait-Aufruf blockiert ist und ein anderer Thread Abort für diesen Thread aufruft, befindet er sich gleichzeitig im Zustand WaitSleepJoin und im Zustand AbortRequested. In diesem Fall empfängt der Thread ThreadAbortException, sobald er vom Aufruf von Wait zurückkehrt oder unterbrochen wird.

Wenn ein Thread durch den Aufruf von Start den Zustand Unstarted verlassen hat, kann er nicht mehr in den Zustand Unstarted zurückkehren. Ein Thread kann niemals den Zustand Stopped verlassen.

Siehe auch

Referenz

ThreadAbortException

Thread

ThreadState

Weitere Ressourcen

Verwaltetes Threading

Änderungsprotokoll

Datum

Versionsgeschichte

Grund

Mai 2011

Die Beziehung zwischen der Thread.Start-Methode und dem Zustand Running wurde genauer beschrieben.

Kundenfeedback.

März 2011

Die Beziehung zwischen der Thread.Start-Methode und dem Zustand Running wurde genauer beschrieben.

Korrektur inhaltlicher Fehler.