Freigeben über


ThreadState Enumeration

Definition

Gibt die Ausführungszustände eines Thread an.

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

Aborted 256

Der Threadzustand schließt AbortRequested ein, und der Thread ist jetzt deaktiviert. Der Zustand hat sich jedoch noch nicht in Stopped geändert.

AbortRequested 128

Die Abort(Object)-Methode wurde für den Thread aufgerufen, doch der Thread hat noch nicht die ausstehende ThreadAbortException empfangen, die ihn zu beenden versucht.

Background 4

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

Running 0

Der Thread wurde gestartet und noch nicht beendet.

Stopped 16

Der Thread wurde beendet.

StopRequested 1

Es besteht eine Anforderung für die Beendigung des Threads. Dies ist ausschließlich für die interne Verwendung vorgesehen.

Suspended 64

Der Thread wurde unterbrochen.

SuspendRequested 2

Es besteht eine Anforderung für die Unterbrechung des Threads.

Unstarted 8

Die Start()-Methode wurde für den Thread nicht aufgerufen.

WaitSleepJoin 32

Der Thread ist blockiert. Die Ursache hierfür könnte sein, dass Sleep(Int32) oder Join() aufgerufen wurde, dass eine Sperre angefordert wurde, z.B. durch Aufrufen von Enter(Object) oder Wait(Object, Int32, Boolean), oder dass auf ein Threadsynchronisierungsobjekt wie ManualResetEvent gewartet wird.

Hinweise

Die ThreadState Aufzählung definiert einen Satz aller möglichen Ausführungszustände für Threads. Es ist nur in einigen Debugszenarien interessant. 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ände, bis er beendet wird. Threads, die in der allgemeinen Sprachlaufzeit erstellt wurden, befinden sich zunächst im Unstarted Zustand, während externe oder nicht verwaltete Threads, die in die Laufzeit kommen, bereits im Running Zustand sind. Ein Thread wird vom Zustand in den Unstarted Running Zustand durch Aufrufen Thread.Startübergestellt. Sobald ein Thread den Zustand Unstarted als Folge eines Aufrufs von Startverlässt, kann er nicht mehr in den Zustand Unstarted zurückkehren.

Ein Thread kann zu einem bestimmten Zeitpunkt in mehr als einem Zustand sein. Wenn beispielsweise ein Thread auf einem Aufruf Monitor.Waitblockiert wird und ein weiterer Threadaufruf Thread.Abort auf dem blockierten Thread aufgerufen wird, befindet sich der blockierte Thread gleichzeitig in den WaitSleepJoin Zuständen und AbortRequested Zuständen. In diesem Fall erhält der Thread, sobald der Thread von dem Aufruf zurückgibt 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 auch in den Aborted Unstarted Zuständen enthalten sein.

Ein Thread kann den Zustand Stopped nie verlassen.

Wichtig

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

Die folgende Tabelle zeigt die Aktionen, die zu einer Änderung des Zustands führen.

Aktion ThreadState
Ein Thread wird innerhalb der allgemeinen Sprachlaufzeit erstellt. Unstarted
Ein weiterer Thread ruft die Thread.Start Methode auf dem neuen Thread auf, und der Aufruf gibt zurück.

Die Start Methode gibt erst zurück, wenn der neue Thread ausgeführt wurde. Es gibt keine Möglichkeit, zu wissen, an welchem Punkt der neue Thread ausgeführt wird, während des Aufrufs.Start
Running
Die Threadaufrufe Sleep WaitSleepJoin
Der Thread ruft Monitor.Wait auf einem anderen Objekt auf. WaitSleepJoin
Der Thread ruft Join auf einem anderen Thread auf. WaitSleepJoin
Weitere Threadanrufe Interrupt Running
Weitere Threadanrufe Suspend SuspendRequested
Der Thread reagiert auf eine Suspend-Anforderung. Suspended
Weitere Threadanrufe Resume Running
Weitere Threadanrufe 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 im Artikel zu Vordergrund- und Hintergrundthreads.

Die Thread.ThreadState Eigenschaft eines Threads stellt den aktuellen Zustand eines Threads bereit. Anwendungen müssen eine Bitmaske verwenden, um zu bestimmen, ob ein Thread ausgeführt wird. Da der Wert für Running null (0) lautet, 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

Siehe auch