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 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
- 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