ThreadState Enumeração

Definição

Especifica os estados de execução de um Thread.

Esta enumeração suporta uma combinação bit-a-bit dos respetivos valores membro.

public enum class ThreadState
[System.Flags]
[System.Serializable]
public enum ThreadState
[System.Flags]
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public enum ThreadState
[System.Flags]
public enum ThreadState
[<System.Flags>]
[<System.Serializable>]
type ThreadState = 
[<System.Flags>]
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type ThreadState = 
[<System.Flags>]
type ThreadState = 
Public Enum ThreadState
Herança
ThreadState
Atributos

Campos

Name Valor Description
Running 0

O tópico já foi iniciado e ainda não parou.

StopRequested 1

O tópico está a ser pedido para parar. Isto é apenas para uso interno.

SuspendRequested 2

O tópico está a ser solicitado a ser suspenso.

Background 4

O thread está a ser executado como um thread em segundo plano, em vez de um thread em primeiro plano. Este estado é controlado ao definir a propriedade IsBackground .

Unstarted 8

O Start() método não foi invocado no tópico.

Stopped 16

O fio parou.

WaitSleepJoin 32

O fio está bloqueado. Isto pode resultar de chamar ou , de pedir um bloqueio – por exemplo, chamando Enter(Object) ou Wait(Object, Int32, Boolean) – ou de esperar por um objeto de sincronização de threads como ManualResetEvent.Join()Sleep(Int32)

Suspended 64

O tópico foi suspenso.

AbortRequested 128

O Abort(Object) método foi invocado no thread, mas o thread ainda não recebeu o pendente ThreadAbortException que tentará terminá-lo.

Aborted 256

O estado do thread inclui AbortRequested e o thread está agora morto, mas o seu estado ainda não mudou para Stopped.

Observações

A ThreadState enumeração define um conjunto de todos os possíveis estados de execução para threads. É interessante apenas em alguns cenários de depuração. O teu código nunca deve usar o estado do thread para sincronizar as atividades dos threads.

Uma vez criada uma thread, está em pelo menos um dos estados até terminar. Os threads criados dentro do runtime da linguagem comum estão inicialmente no Unstarted estado, enquanto os threads externos, ou não geridos, que entram no runtime já estão nesse Running estado. Um thread é transicionado do Unstarted estado para o Running estado ao chamar Thread.Start. Uma vez que um thread sai do Unstarted estado como resultado de uma chamada para Start, nunca pode regressar ao Unstarted estado.

Um thread pode estar em mais do que um estado ao mesmo tempo. Por exemplo, se um thread for bloqueado numa chamada para Monitor.Wait, e outro thread chamar Thread.Abort para o thread bloqueado, o thread bloqueado estará em ambos os WaitSleepJoin estados e AbortRequested ao mesmo tempo. Neste caso, assim que o thread regressa da chamada para Monitor.Wait ou é interrompido, receberá o ThreadAbortException para começar a abortar. Nem todas as combinações de ThreadState valores são válidas; por exemplo, um thread não pode estar em ambos os Aborted estados e Unstarted .

Um fio nunca pode sair do Stopped estado.

Importante

Existem duas enumerações de estados por thread: System.Threading.ThreadState e System.Diagnostics.ThreadState.

A tabela seguinte mostra as ações que causam uma mudança de estado.

Action ThreadState
Um thread é criado dentro do runtime da linguagem comum. Unstarted
Outro thread chama o Thread.Start método no novo thread, e a chamada retorna.

O Start método não retorna até que o novo thread tenha começado a correr. Não há forma de saber em que momento a nova thread começará a correr, durante a chamada para Start.
Running
As chamadas do fio Sleep WaitSleepJoin
O fio invoca Monitor.Wait outro objeto. WaitSleepJoin
O fio chama Join para outro fio. WaitSleepJoin
Outro tópico chama Interrupt Running
Outro tópico chama Suspend SuspendRequested
O tópico responde a um Suspend pedido. Suspended
Outro tópico chama Resume Running
Outro tópico chama Abort AbortRequested
O tópico responde a um Abort pedido. Stopped
Um tópico é terminado. Stopped

Para além dos estados mencionados acima, existe também o Background estado, que indica se o thread está a correr em segundo plano ou em primeiro plano. Para mais informações, consulte Threads de Primeiro Plano e de Segundo Plano.

A Thread.ThreadState propriedade de uma thread fornece o estado atual da thread. As aplicações devem usar uma máscara de bits para determinar se um thread está a correr. Como o valor de Running é zero (0), teste se uma thread está a correr pelo seguinte código:

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

Aplica-se a

Ver também