Threads em primeiro plano e em segundo plano

Um thread gerenciado é um thread em segundo plano ou um thread em primeiro plano. Threads em segundo plano são idênticos aos threads em primeiro plano com uma exceção: um thread em segundo plano não mantém o ambiente de execução gerenciado em execução. Uma vez que todos os threads em primeiro plano foram interrompidos em um processo gerenciado (onde o arquivo .exe é um assembly gerenciado), o sistema interrompe todos os threads em segundo plano e desliga.

Observação

Quando o runtime interrompe um thread em segundo plano porque o processo está sendo desligado, nenhuma exceção é lançada no thread. No entanto, quando os threads são interrompidos porque o método AppDomain.Unload descarrega o domínio do aplicativo, um ThreadAbortException é lançado em ambos os threads em primeiro plano e em segundo plano.

Use a propriedade Thread.IsBackground para determinar se um thread é um thread em segundo plano ou em primeiro plano, ou para alterar seu status. Um thread pode ser alterado para um thread em segundo plano a qualquer momento, definindo a propriedade IsBackground para true.

Importante

O status em primeiro plano ou em segundo plano de um thread não afeta o resultado de uma exceção sem tratamento no thread. Uma exceção sem tratamento em threads em primeiro plano ou em segundo plano resulta no encerramento do aplicativo. Confira Exceções em threads gerenciados.

Threads pertencentes ao pool de threads gerenciados (ou seja, threads cuja propriedade IsThreadPoolThread é true) são threads em segundo plano. Todos os threads que entram no ambiente de execução gerenciado do código não gerenciado são marcados como threads em segundo plano. Todos os threads gerados ao criar e iniciar um novo objeto Thread são, por padrão, threads em primeiro plano.

Se você usar um thread para monitorar uma atividade, como uma conexão de soquete, defina sua propriedade IsBackground como true para que o thread não impeça o encerramento do processo.

Confira também