Compartilhar via


ThreadState Enumeração

Definição

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

Essa enumeração dá suporte a uma combinação bit a bit dos valores de membro.

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
Herança
ThreadState
Atributos

Campos

Nome Valor Description
Running 0

O thread foi iniciado e ainda não foi interrompido.

StopRequested 1

O thread está sendo solicitado a parar. Isso é apenas para uso interno.

SuspendRequested 2

O thread está sendo solicitado a suspender.

Background 4

O thread está sendo executado como um thread em segundo plano, em vez de um thread em primeiro plano. Esse estado é controlado definindo a IsBackground propriedade.

Unstarted 8

O Start() método não foi invocado no thread.

Stopped 16

O thread foi interrompido.

WaitSleepJoin 32

O thread está bloqueado. Isso pode ser o resultado da chamada Sleep(Int32) ou Join()da solicitação de um bloqueio, por exemplo, chamando Enter(Object) ou Wait(Object, Int32, Boolean) aguardando um objeto de sincronização de thread, como ManualResetEvent.

Suspended 64

O thread 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á encerrá-lo.

Aborted 256

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

Comentários

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

Depois que um thread é criado, ele está em pelo menos um dos estados até que seja encerrado. Os threads criados no common language runtime estão inicialmente no Unstarted estado, enquanto os threads externos ou não gerenciados que entram no runtime já estão no Running estado. Um thread é transferido do Unstarted estado para o Running estado chamando Thread.Start. Depois que um thread deixa o Unstarted estado como resultado de uma chamada, Startele nunca pode retornar ao Unstarted estado.

Um thread pode estar em mais de um estado em um determinado momento. Por exemplo, se um thread for bloqueado em uma chamada e Monitor.Waitoutra chamada Thread.Abort de thread no thread bloqueado, o thread bloqueado estará nos WaitSleepJoin estados e AbortRequested nos estados ao mesmo tempo. Nesse caso, assim que o thread retornar da chamada para Monitor.Wait ou for interrompido, ele receberá a anulação ThreadAbortException . Nem todas as combinações de ThreadState valores são válidas; por exemplo, um thread não pode estar nos estados e Unstarted nos Aborted estados.

Um thread nunca pode sair do Stopped estado.

Importante

Há duas enumerações de estado de thread: System.Threading.ThreadState e System.Diagnostics.ThreadState.

A tabela a seguir mostra as ações que causam uma alteração de estado.

Ação Threadstate
Um thread é criado no common language runtime. 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 ser executado. Não há como saber em que ponto o novo thread começará a ser executado durante a chamada para Start.
Running
As chamadas de thread Sleep WaitSleepJoin
O thread chama Monitor.Wait em outro objeto. WaitSleepJoin
O thread chama Join em outro thread. WaitSleepJoin
Outras chamadas de thread Interrupt Running
Outras chamadas de thread Suspend SuspendRequested
O thread responde a uma solicitação Suspend . Suspended
Outras chamadas de thread Resume Running
Outras chamadas de thread Abort AbortRequested
O thread responde a uma solicitação Abort . Stopped
Um thread é encerrado. Stopped

Além dos estados observados acima, há também o Background estado, que indica se o thread está em execução em segundo plano ou em primeiro plano. Para obter mais informações, confira Threads em primeiro plano e em segundo plano.

A Thread.ThreadState propriedade de um thread fornece o estado atual de um thread. Os aplicativos devem usar uma máscara de bits para determinar se um thread está em execução. Como o valor é Running zero (0), teste se um thread está sendo executado pelo seguinte código:

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

Aplica-se a

Confira também