Partilhar 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

Aborted 256

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

AbortRequested 128

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

Background 4

O thread está sendo executado como um thread em segundo plano, em vez de um thread de primeiro plano. Esse estado é controlado pela configuração da propriedade IsBackground.

Running 0

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

Stopped 16

O thread foi interrompido.

StopRequested 1

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

Suspended 64

O thread foi suspenso.

SuspendRequested 2

O thread está sendo solicitado a suspender.

Unstarted 8

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

WaitSleepJoin 32

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

Comentários

A ThreadState enumeração define um conjunto de todos os estados de execução possíveis para threads. É interessante 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 fica 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 é transitório do Unstarted estado para o Running estado chamando Thread.Start. Depois que um thread sair do estado Unstarted devido a uma chamada para Start, ele nunca poderá retornar para o estado Unstarted.

Um thread pode estar em mais de um estado em um determinado momento. Por exemplo, se um thread for bloqueado em uma chamada e outra chamada Thread.Abort de Monitor.Waitthread no thread bloqueado, o thread bloqueado estará nos estados e AbortRequested estados WaitSleepJoin ao mesmo tempo. Nesse caso, assim que o thread retornar da chamada para Monitor.Wait ou for interrompido, ele 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 nos estados e Unstarted nos Aborted estados.

Um thread nunca pode deixar o estado Stopped.

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 uma solicitação de 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