Partilhar via


Destruição de segmentos

The Abort método é usado para interromper um thread gerenciado permanentemente. Quando você telefonar Abort, o common linguagem tempo de execução lança um ThreadAbortException no segmento destino, que pode capturar o thread-alvo. Para obter mais informações, consulte Thread.Abort.

Observação:

Se um segmento está em execução não gerenciado de código quando seu Abort método é chamado, o tempo de execução marca ThreadState.AbortRequested. A exceção é lançada quando o thread retorna ao código gerenciado.

Depois que um thread é interrompido, ele não pode ser reiniciado.

The Abort método não faz com que o thread interromper imediatamente, porque o thread-alvo pode capturar o ThreadAbortException e executar quantidades arbitrárias de código em um finally bloco. Você pode chamar Thread.Join Se você precisar esperar até que o thread foi finalizada. Thread.Join é uma telefonar de bloqueio que não retorna até que o thread realmente parou de executar ou um intervalo de tempo limite opcional tiver decorrido. O thread anulado poderia chamar o ResetAbort método ou executar o processamento não vinculado em um finally bloquear, portanto, se você não especificar um tempo limite, a espera não é garantida para encerrar.

Segmentos que estão aguardando em uma telefonar para o Thread.Join método pode ser interrompido por outros threads de telefonar Thread.Interrupt.

Tratamento ThreadAbortException

Se você espera que o thread a ser interrompida, ou sistema autônomo resultado da chamada Abort de seu próprio código ou sistema autônomo resultado de descarregar um domínio do aplicativo no qual o thread está em execução)AppDomain.Unload usa Thread.Abort Para terminar threads), o thread deve lidar com o ThreadAbortException e executar qualquer processamento final em um finally cláusula, sistema autônomo mostra o código a seguir.

Try
    ' Code that is executing when the thread is aborted.
Catch ex As ThreadAbortException
    ' Clean-up code can go here.
    ' If there is no Finally clause, ThreadAbortException is
    ' re-thrown by the system at the end of the Catch clause. 
Finally
    ' Clean-up code can go here.
End Try
' Do not put clean-up code here, because the exception 
' is rethrown at the end of the Finally clause.
try 
{
    // Code that is executing when the thread is aborted.
} 
catch (ThreadAbortException ex) 
{
    // Clean-up code can go here.
    // If there is no Finally clause, ThreadAbortException is
    // re-thrown by the system at the end of the Catch clause. 
}
// Do not put clean-up code here, because the exception 
// is rethrown at the end of the Finally clause.

O código de limpeza deve estar no catch cláusula ou o finally cláusula, porque um ThreadAbortException relançadas pelo sistema no participante do finally cláusula, ou no participante das catch cláusula se não houver nenhum finally cláusula.

Você pode impedir que o sistema de relançamento a exceção, chamando o Thread.ResetAbort método. No entanto, você deve fazer isso somente se o seu próprio código causou o ThreadAbortException.

Consulte também

Referência

ThreadAbortException

Thread

Outros recursos

Usando threads e Threading