Freigeben über


ThreadState Enumeration

Definition

Gibt die Ausführungszustände eines Threadan.

Diese Enumeration unterstützt eine bitweise Kombination ihrer Memberwerte.

public enum class ThreadState
[System.Flags]
public enum ThreadState
[System.Flags]
[System.Runtime.InteropServices.ComVisible(true)]
public enum ThreadState
[System.Flags]
[System.Serializable]
public enum ThreadState
[System.Flags]
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public enum ThreadState
[<System.Flags>]
type ThreadState = 
[<System.Flags>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type ThreadState = 
[<System.Flags>]
[<System.Serializable>]
type ThreadState = 
[<System.Flags>]
[<System.Runtime.InteropServices.ComVisible(true)>]
[<System.Serializable>]
type ThreadState = 
Public Enum ThreadState
Vererbung
ThreadState
Attribute

Felder

Name Wert Beschreibung
Running 0

Der Thread wurde gestartet und wurde noch nicht beendet.

StopRequested 1

Der Thread wird zum Beenden angefordert. Dies ist nur für die interne Verwendung vorgesehen.

SuspendRequested 2

Der Thread wird zum Anhalten angefordert.

Background 4

Der Thread wird als Hintergrundthread und nicht als Vordergrundthread ausgeführt. Dieser Zustand wird durch Festlegen der IsBackground Eigenschaft gesteuert.

Unstarted 8

Die Start() Methode wurde im Thread nicht aufgerufen.

Stopped 16

Der Thread wurde beendet.

WaitSleepJoin 32

Der Thread wird blockiert. Dies kann das Ergebnis des Aufrufens Sleep(Int32) oder Join()des Anforderns einer Sperre sein , z. B. durch Aufrufen oder Wait(Object, Int32, Boolean) Warten Enter(Object) auf ein Threadsynchronisierungsobjekt wie ManualResetEventz. B. .

Suspended 64

Der Thread wurde angehalten.

AbortRequested 128

Die Abort(Object) Methode wurde im Thread aufgerufen, aber der Thread hat noch nicht den ausstehenden ThreadAbortException Empfang erhalten, der versucht, sie zu beenden.

Aborted 256

Der Threadzustand enthält AbortRequested und der Thread ist jetzt tot, aber sein Zustand wurde noch nicht geändert Stopped.

Hinweise

Die ThreadState Enumeration definiert einen Satz aller möglichen Ausführungszustände für Threads. Es ist nur für ein paar Debugszenarien von Interesse. Ihr Code sollte niemals den Threadzustand verwenden, um die Aktivitäten von Threads zu synchronisieren.

Sobald ein Thread erstellt wurde, befindet es sich in mindestens einem der Zuständen, bis er beendet wird. In der Common Language Runtime erstellte Threads befinden sich zunächst im Unstarted Zustand, während externe oder nicht verwaltete Threads, die in die Laufzeit gelangen, bereits im Running Zustand sind. Ein Thread wird durch Aufrufen Thread.Startvom Unstarted Zustand in den Running Zustand umgestellt. Sobald ein Thread den Unstarted Zustand als Ergebnis eines Aufrufs Startverlässt, kann er nie zum Unstarted Zustand zurückkehren.

Ein Thread kann sich zu einem bestimmten Zeitpunkt in mehr als einem Zustand befinden. Wenn z. B. ein Thread für einen Aufruf Monitor.Waitblockiert wird und ein anderer Threadaufruf für den blockierten Thread ausgeführt Thread.Abort wird, befindet sich der blockierte Thread in den WaitSleepJoin beiden Zuständen und AbortRequested in den Zuständen. In diesem Fall erhält der Thread, sobald der Thread vom Aufruf an Monitor.Wait oder unterbrochen wird, den ThreadAbortException Abbruch zu beginnen. Nicht alle Kombinationen von ThreadState Werten sind gültig, z. B. kann ein Thread nicht sowohl in den Zuständen als Unstarted auch in den Aborted Zuständen enthalten sein.

Ein Thread kann den Stopped Zustand nie verlassen.

Von Bedeutung

Es gibt zwei Threadzustandsaufzählungen: System.Threading.ThreadState und System.Diagnostics.ThreadState.

In der folgenden Tabelle sind die Aktionen aufgeführt, die zu einer Änderung des Zustands führen.

Action Threadstate
Innerhalb der Common Language Runtime wird ein Thread erstellt. Unstarted
Ein anderer Thread ruft die Thread.Start Methode für den neuen Thread auf, und der Aufruf wird zurückgegeben.

Die Start Methode wird erst zurückgegeben, wenn der neue Thread ausgeführt wurde. Es gibt keine Möglichkeit zu wissen, an welchem Punkt der neue Thread während des Aufrufs Startausgeführt wird.
Running
Der Thread ruft Sleep WaitSleepJoin
Der Thread ruft ein anderes Objekt auf Monitor.Wait . WaitSleepJoin
Der Thread ruft einen anderen Thread auf Join . WaitSleepJoin
Weitere Threadaufrufe Interrupt Running
Weitere Threadaufrufe Suspend SuspendRequested
Der Thread antwortet auf eine Suspend Anforderung. Suspended
Weitere Threadaufrufe Resume Running
Weitere Threadaufrufe Abort AbortRequested
Der Thread antwortet auf eine Abort Anforderung. Stopped
Ein Thread wird beendet. Stopped

Zusätzlich zu den oben genannten Zuständen gibt es auch den Background Zustand, der angibt, ob der Thread im Hintergrund oder Im Vordergrund ausgeführt wird. Weitere Informationen finden Sie unter "Vordergrund- und Hintergrundthreads".

Die Thread.ThreadState Eigenschaft eines Threads stellt den aktuellen Status eines Threads bereit. Anwendungen müssen eine Bitmaske verwenden, um zu bestimmen, ob ein Thread ausgeführt wird. Da der Wert null Running (0) ist, testen Sie, ob ein Thread mit dem folgenden Code ausgeführt wird:

(myThread.ThreadState & (ThreadState.Stopped | ThreadState.Unstarted)) == 0
(myThread.ThreadState And (ThreadState.Stopped Or ThreadState.Unstarted)) = 0

Gilt für:

Weitere Informationen