ThreadState Enumerazione
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Vengono specificati gli stati di esecuzione di un Thread.
Questa enumerazione supporta una combinazione bit per bit dei rispettivi valori dei membri.
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
- Ereditarietà
- Attributi
Campi
Aborted | 256 | Lo stato del thread include AbortRequested e il thread è ora inattivo, ma il relativo stato non è ancora stato modificato in Stopped. |
AbortRequested | 128 | Il metodo Abort(Object) è stato richiamato dal thread ma il thread non ha ancora ricevuto l'oggetto ThreadAbortException sospeso che tenterà di sottoporlo al processo di terminazione. |
Background | 4 | Il thread sarà eseguito come un thread in background, invece che come un thread in primo piano. Questo stato viene controllato dall'impostazione della proprietà IsBackground. |
Running | 0 | Il thread è stato avviato e non è ancora stato interrotto. |
Stopped | 16 | Il thread è stato interrotto. |
StopRequested | 1 | Il thread riceverà richiesta di interruzione. Solo per uso interno. |
Suspended | 64 | Il thread è stato sospeso. |
SuspendRequested | 2 | Il thread riceverà richiesta di sospensione. |
Unstarted | 8 | Il metodo Start() non è stato richiamato dal thread. |
WaitSleepJoin | 32 | Il thread è bloccato. Potrebbe essere il risultato della chiamata al metodo Sleep(Int32) o Join(), della richiesta di un blocco, ad esempio tramite la chiamata a Enter(Object) o Wait(Object, Int32, Boolean), oppure dell'attesa di un oggetto di sincronizzazione thread, ad esempio ManualResetEvent. |
Commenti
L'enumerazione ThreadState
definisce un set di tutti gli stati di esecuzione possibili per i thread. È di interesse solo in alcuni scenari di debug. Il codice non deve mai usare lo stato del thread per sincronizzare le attività dei thread.
Dopo aver creato un thread, si trova in almeno uno degli stati fino a quando non termina. I thread creati all'interno di Common Language Runtime sono inizialmente nello Unstarted stato, mentre i thread esterni o non gestiti sono già nello Running stato. Un thread viene passato dallo Unstarted stato allo Running stato chiamando Thread.Start. Quando un thread lascia lo stato Unstarted in seguito a una chiamata a Start, non può più tornare allo stato Unstarted .
Un thread può essere in più di uno stato alla volta. Ad esempio, se un thread viene bloccato in una chiamata a Monitor.Waite un altro thread chiama Thread.Abort sul thread bloccato, il thread bloccato si trova nello stesso momento in entrambi gli WaitSleepJoin stati e AbortRequested . In questo caso, non appena il thread restituisce dalla chiamata a Monitor.Wait o viene interrotto, riceverà l'oggetto ThreadAbortException per iniziare l'interruzione. Non tutte le combinazioni di ThreadState
valori sono valide, ad esempio un thread non può trovarsi nello Aborted stato e Unstarted .
Un thread non può mai lasciare lo stato Stopped .
Importante
Esistono due enumerazioni dello stato del thread: System.Threading.ThreadState e System.Diagnostics.ThreadState.
Nella tabella seguente vengono illustrate le azioni che causano una modifica dello stato.
Azione | ThreadState |
---|---|
Un thread viene creato all'interno di Common Language Runtime. | Unstarted |
Un altro thread chiama il Thread.Start metodo nel nuovo thread e la chiamata restituisce. Il Start metodo non restituisce fino all'avvio del nuovo thread. Non è possibile sapere a quale punto il nuovo thread inizierà a eseguire, durante la chiamata a Start. |
Running |
Il thread chiama Sleep | WaitSleepJoin |
Il thread chiama Monitor.Wait su un altro oggetto. | WaitSleepJoin |
Il thread chiama Join su un altro thread. | WaitSleepJoin |
Un altro thread chiama Interrupt | Running |
Un altro thread chiama Suspend | SuspendRequested |
Il thread risponde a una richiesta Suspend. | Suspended |
Un altro thread chiama Resume | Running |
Un altro thread chiama Abort | AbortRequested |
Il thread risponde a una Abort richiesta. | Stopped |
Un thread viene terminato. | Stopped |
Oltre agli stati indicati in precedenza, esiste anche lo Background stato, che indica se il thread è in esecuzione in background o in primo piano. Per altre informazioni, vedere Thread in primo piano e in background.
La Thread.ThreadState proprietà di un thread fornisce lo stato corrente di un thread. Le applicazioni devono usare una maschera bit per determinare se un thread è in esecuzione. Poiché il valore per Running è zero (0), verificare se un thread è in esecuzione dal codice seguente:
(myThread.ThreadState & (ThreadState.Stopped | ThreadState.Unstarted)) == 0
(myThread.ThreadState And (ThreadState.Stopped Or ThreadState.Unstarted)) = 0