Partilhar via


Estados do Thread gerenciado

A propriedade Thread.ThreadState fornece uma máscara de bits que indica o estado atual. do segmento Um thread está sempre em pelo menos um dos possíveis estados na ThreadState enumeração e pode ser em vários estados, ao mesmo tempo.

Observação importanteImportante

Estado do segmento só tem interesse em alguns cenários de depuração.Seu código nunca deve usar o estado do segmento para sincronizar as atividades de threads.

Quando você cria um segmento gerenciado, trata-o Unstarted estado. O thread permanece na Unstarted estado até que ele é movido para o estado iniciado pelo sistema operacional. Chamando Start permite que o sistema operacional sabe que o thread pode ser iniciado; ele não altera o estado do segmento.

Os segmentos não gerenciados que inserir o ambiente gerenciado já estão no estado de iniciado. Depois que um thread estiver no estado de iniciado, pode causar uma série de ações para alterar os estados. A tabela a seguir lista as ações que causam uma alteração de estado, juntamente com o novo estado correspondente.

Ação

Estado novo resultante

O construtor para o Thread é chamado de classe.

Unstarted

Chamadas de outro thread o Thread.Start método em um novo thread e retorna a chamada.

Observação

O Start método não retorna até que o novo segmento foi iniciado em execução.Não há nenhuma maneira de saber o ponto em que o novo segmento será iniciado durante a chamada para Start.

Running

As chamadas de segmento Thread.Sleep.

WaitSleepJoin

As chamadas de segmento Monitor.Wait em outro objeto.

WaitSleepJoin

As chamadas de segmento Thread.Join em outro segmento.

WaitSleepJoin

Chamadas de outro thread Thread.Suspend.

SuspendRequested

O segmento responde a uma Thread.Suspend solicitação.

Suspended

Chamadas de outro thread Thread.Resume.

Running

Chamadas de outro thread Thread.Abort.

AbortRequested

O segmento responde a uma Thread.Abort.

Aborted, em seguida,Stopped

Porque o Running estado tem um valor de 0, mas não é possível executar um teste de bit para descobrir o estado. Em vez disso, o teste a seguir (em pseudocódigo) pode ser usado:

if ((state & (Unstarted | Stopped)) == 0)   // implies Running   

Segmentos são freqüentemente em mais de um estado em qualquer momento. Por exemplo, se um thread estiver bloqueado em uma Monitor.Wait chamada e chamadas de outro thread Abort no mesmo thread, o segmento será em ambos o WaitSleepJoin e o AbortRequested estados ao mesmo tempo. Nesse caso, assim que o segmento retorna da chamada para Wait ou for interrompida, ele receberá o ThreadAbortException.

Depois que um thread deixa o Unstarted estado como resultado de uma chamada para Start, nunca pode retornar para a Unstarted estado. Um thread nunca pode deixar o Stopped estado.

Consulte também

Referência

ThreadAbortException

Thread

ThreadState

Outros recursos

Threads gerenciadas

Histórico de alterações

Date

History

Motivo

Março de 2011

Esclarecida a relação entre a Thread.Start método e a Running estado.

Correção de bug de conteúdo.