ThreadState Enumeração
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
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
- 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