Estados do thread gerenciado
A propriedade Thread.ThreadState Fornece uma máscara de bit que indica o estado corrente thread's. Um thread está sempre em pelo menos um dos possíveis estados no ThreadState enumeração e podem estar em vários estados ao mesmo time.
Observação importante: |
---|
thread estado é somente de interesse em alguns cenários de depuração.Seu código nunca deve usar thread estado para sincronizar as atividades de thread s. |
Quando você cria um gerenciado thread no Unstarted estado. O thread permanece no Unstarted estado até que ele é movido para o estado iniciado pelo sistema operacional. De chamadaStart permite que o sistema operacional sabe que o thread pode ser iniciado, ele não altera o estado do segmento.
Threads não gerenciados que inserir o ambiente gerenciado já estão em estado iniciado.Uma vez no estado iniciado, há uma série de ações que podem fazer com que o thread para alterar os estados.A tabela a seguir lista as ações que causam uma alterar de estado, juntamente com o novo estado correspondente.
Ação |
Novo estado resultante |
---|---|
Outro thread chama Thread.Start. |
Inalterado |
O thread responde a Thread.Start e começa a executar. |
|
O thread chama Thread.Sleep. |
|
O thread chama Monitor.Wait em outro objeto. |
|
O thread chama Thread.Join em outro thread. |
|
Outro thread chama Thread.Suspend. |
|
O thread responde a um Thread.Suspend solicitação. |
|
Outro thread chama Thread.Resume. |
|
Outro thread chama Thread.Suspend. |
|
Outro thread chama Thread.Abort. |
|
O thread responde a um Thread.Abort. |
Because the Runningstate has a value of 0, it is not possible to perform a bit test to discover this state.Em vez disso, é possível usar o seguinte teste (em pseudocódigo):
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 um Monitor.Wait telefonar e outro thread chamadas Abort Nesse mesmo thread, o thread será em ambos os WaitSleepJoin e o AbortRequested estado ao mesmo time. Nesse caso, assim sistema autônomo o thread retorna de telefonar para Wait ou é interrompida, ele receberá o ThreadAbortException.
Depois que um thread deixa o Unstarted estado sistema autônomo resultado de uma telefonar para Start, ele nunca pode retornar para o Unstarted estado. Um thread nunca pode deixar o Stopped estado.