Condividi tramite


ThreadState Enumerazione

Definizione

Specifica 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à
ThreadState
Attributi

Campi

Nome Valore Descrizione
Running 0

Il thread è stato avviato e non è ancora stato arrestato.

StopRequested 1

Il thread viene richiesto di arrestare. Questo è solo per uso interno.

SuspendRequested 2

Il thread viene richiesto di sospendere.

Background 4

Il thread viene eseguito come thread in background, anziché come thread in primo piano. Questo stato è controllato impostando la IsBackground proprietà .

Unstarted 8

Il Start() metodo non è stato richiamato sul thread.

Stopped 16

Il thread è stato arrestato.

WaitSleepJoin 32

Il thread è bloccato. Può trattarsi del risultato della chiamata Sleep(Int32) a o Join(), della richiesta di un blocco, ad esempio chiamando Enter(Object) o Wait(Object, Int32, Boolean) , o di attesa su un oggetto di sincronizzazione del thread, ManualResetEventad esempio .

Suspended 64

Il thread è stato sospeso.

AbortRequested 128

Il Abort(Object) metodo è stato richiamato sul thread, ma il thread non ha ancora ricevuto l'oggetto in sospeso ThreadAbortException che tenterà di terminarlo.

Aborted 256

Lo stato del thread include AbortRequested e il thread è ora inattivo, ma il relativo stato non è ancora stato modificato in Stopped.

Commenti

L'enumerazione ThreadState definisce un set di tutti gli stati di esecuzione possibili per i thread. È interessante 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 stato in Running fase di esecuzione. Un thread viene sottoposto a transizione dallo Unstarted stato allo Running stato chiamando Thread.Start. Quando un thread lascia lo Unstarted stato come risultato di una chiamata a Start, non può mai tornare allo Unstarted stato .

Un thread può trovarsi in più di uno stato in un determinato momento. 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 troverà nello WaitSleepJoin stesso stato e AbortRequested . In questo caso, non appena il thread torna dalla chiamata a Monitor.Wait o viene interrotto, riceverà l'oggetto per iniziare l'interruzione ThreadAbortException . Non tutte le combinazioni di ThreadState valori sono valide, ad esempio un thread non può trovarsi in entrambi gli Aborted stati e Unstarted .

Un thread non può mai lasciare lo Stopped stato.

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.

Action ThreadState
Un thread viene creato all'interno di Common Language Runtime. Unstarted
Un altro thread chiama il Thread.Start metodo sul nuovo thread e la chiamata restituisce.

Il Start metodo non restituisce finché il nuovo thread non viene avviato. Non è possibile sapere in che punto il nuovo thread verrà avviato, 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 Suspend richiesta. 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 ulteriori informazioni, vedere Thread di 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 di bit per determinare se un thread è in esecuzione. Poiché il valore per Running è zero (0), verificare se un thread è in esecuzione nel codice seguente:

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

Si applica a

Vedi anche