Como destravar aplicações usando thread paralela em C#

Quando desenvolvemos softwares que acessam banco de dados pesados ou que faz algum tipo de processamento demorado, como o envio de e-mails, por exemplo, o software “trava” enquanto o processamento da solicitação não termina. Neste post veja como destravar aplicações usando thread paralela em C#.

É constrangedor oferecer ao usuário um software que não avisa quando está processando algo demorado e impede que qualquer outra coisa seja feita antes do processamento atual terminar.

Para resolver este problema criamos um thread em paralelo, que assumirá a operação demorada e, depois de concluí-la, notificará o thread principal. Desta forma, o programa não ficará travado e será possível executar outras tarefas.

Para isso, usamos o componente BackgroundWorker, que possui três eventos: DoWork, ProgressChanged e RunWorkerComplet.

Dentro do evento DoWork escrevemos os códigos que farão os processamentos demorados e mais complexos.

No evento ProgressChanged mostramos o progresso do processamento em DoWork.

Em em RunWorkerComplet escrevemos os códigos que serão processados após a conclusão do processamento em DoWork.

O trecho de código abaixo precisa ser escrito dentro do evento que irá disparar os processamentos, que pode ser um click de botão, por exemplo. Verifica se o “backgroundWorker” está executando alguma ação assíncrona, caso contrário inicia a operação com o método “backgroundWorker1.RunWorkerAsync()”:

if (backgroundWorker1.IsBusy != true) {
	backgroundWorker1.RunWorkerAsync();
}

No evento DoWork, escreva os códigos que farão os processamentos:

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) {
	//Códigos
}

No evento ProgressChanged podemos mostrar, por exemplo, um ProgressBar para exibir o andamento dos processamentos:

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) {
 	this.progressBar1.Value = e.ProgressPercentage;
 }

No evento RunWorkerComplet escrevemos os códigos que serão executados após o thread secundária terminar os processamentos e avisar a thread principal sobre a conclusão:

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
	MessageBox("Operação concluída com sucesso!");
}

Clique aqui para baixar um projeto exemplo. 

Dúvidas ou sugestões? Deixem nos comentários! Para mais dicas, acesse o nosso canal no YouTube:
 https://youtube.com/criandobits

Tags:

O seu computador está lento, travando ou dando tela azul… e você não faz ideia do que fazer?

Saiba que isso pode estar te fazendo perder dinheiro — seja com manutenção cara ou oportunidades que você está deixando passar.

Com o Super Técnico 2.0, você aprende na prática como diagnosticar defeitos, montar computadores do zero e fazer upgrades que realmente aumentam o desempenho, mesmo que você esteja começando do absoluto zero.

Você pode usar esse conhecimento para:

✔ Resolver seus próprios problemas sem depender de ninguém
✔ Ganhar dinheiro com manutenção e suporte técnico
✔ Ou até entrar de vez no mercado de TI

Tudo com aulas diretas ao ponto, sem enrolação e focadas no que realmente funciona no dia a dia.

👉 CLIQUE AQUI AGORA e veja todos os detalhes antes que essa oportunidade passe:

Super Técnico 2.0

Sobre o Autor

Benedito Silva Júnior
Benedito Silva Júnior

Bacharel em Sistemas de Informação e apaixonado por tecnologias e games do tempo da vovó!

0 Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *