Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Com o .NET, você pode escrever aplicativos que executam várias operações ao mesmo tempo. As operações com o potencial de atrasar outras operações podem ser executadas em threads separados, um processo conhecido como multithreading ou free threading.
Os aplicativos que usam multithreading são mais responsivos à entrada do usuário porque a interface do usuário permanece ativa à medida que tarefas com uso intensivo de processador são executadas em threads separados. O multithreading também é útil quando você cria aplicativos escalonáveis porque pode adicionar threads à medida que a carga de trabalho aumenta.
Observação
Se você precisar de mais controle sobre o comportamento dos threads do aplicativo, poderá gerenciar os threads por conta própria. No entanto, a programação multithread é muito simplificada com as classes System.Threading.Tasks.Parallel e System.Threading.Tasks.Task, Parallel LINQ (PLINQ), classes de coleção simultâneas no namespace System.Collections.Concurrent, e um modelo de programação baseado no conceito de tarefas em vez de threads. Para obter mais informações, consulte Programação Paralela e Biblioteca de Paralelismo de Tarefas (TPL).
Como criar e iniciar um novo thread
Crie um novo thread criando uma nova instância da System.Threading.Thread classe. Você fornece o nome do método que deseja executar no novo thread para o construtor. Para iniciar um thread criado, chame o Thread.Start método. Para obter mais informações e exemplos, consulte o artigo Criando threads e passando dados na hora de início e a referência de Thread API.
Como parar um thread
Para encerrar a execução de um thread, use o System.Threading.CancellationToken. Ele fornece uma maneira unificada de parar threads de forma cooperativa. Para saber mais, confira Cancelamento em threads gerenciados.
Às vezes, não é possível interromper um thread de forma cooperativa porque ele executa código de terceiros não projetado para cancelamento cooperativo. Nesse caso, talvez você queira encerrar a execução à força. Para encerrar a execução de um thread à força, no .NET Framework você pode usar o Thread.Abort método. Esse método gera um ThreadAbortException na thread onde é invocado. Para obter mais informações, consulte Destruindo threads. O método Thread.Abort não é suportado no .NET Core. Se você precisar encerrar a execução do código de terceiros à força no .NET Core, execute-o no processo separado e use o Process.Kill método.
System.Threading.CancellationToken não está disponível antes do .NET Framework 4. Para interromper um thread em versões mais antigas do .NET Framework, use as técnicas de sincronização de thread para implementar o cancelamento cooperativo manualmente. Por exemplo, você pode criar o campo shouldStop
booliano volátil e usá-lo para solicitar que o código executado pelo thread pare. Para obter mais informações, consulte volatile na Referência de C# e System.Threading.Volatile.
Use o método Thread.Join para fazer com que o thread de chamada espere o encerramento do thread que está sendo parado.
Como pausar ou interromper um thread
Use o Thread.Sleep método para pausar o thread atual por um período de tempo especificado. Você pode interromper um thread bloqueado chamando o Thread.Interrupt método. Para mais informações, veja Pausar e interromper processos.
Propriedades do thread
A tabela a seguir apresenta algumas das Thread propriedades:
Propriedade | Descrição |
---|---|
IsAlive | Retorna true se uma thread foi iniciada e ainda não foi encerrada normalmente ou abortada. |
IsBackground | Obtém ou define um valor Booleano que indica se um tópico é um tópico de segundo plano. Os threads em segundo plano são como os threads em primeiro plano. No entanto, um thread em segundo plano não impede que um processo pare. Depois que todos os foreground threads que pertencem a um processo forem interrompidos, o common language runtime encerra o processo chamando o método Abort nos background threads que ainda estão ativos. Para obter mais informações, confira Threads em primeiro plano e em segundo plano. |
Name | Obtém ou define o nome de um thread. Usado com mais frequência para descobrir threads individuais quando você depura. |
Priority | Obtém ou define um ThreadPriority valor usado pelo sistema operacional para priorizar o agendamento de threads. Para obter mais informações, confira Agendando threads e a referência de ThreadPriority. |
ThreadState | Obtém um ThreadState valor que contém os estados atuais de um thread. |