ThreadState Enumeration
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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
- 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