Condividi tramite


ThreadState Enumerazione

Definizione

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

Si applica a

Vedi anche