C#

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. 

Aprenda do zero ou aprimore seus conhecimentos em C#. Domine os conceitos de Orientação a Objetos e crie sistemas complexos integrados com banco de dados.

CONHEÇA O CURSO COMPLETO DE C# COM + DE 100 AULAS PRÁTICAS. Tenha acesso vitalício e certificado de conclusão.

CLIQUE NA IMAGEM ABAIXO E CONFIRA MAIS DETALHES:

Link do curso: https://go.hotmart.com/L70031146H


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

Bene Silva Júnior

Bacharel em Sistemas de Informação pelo Instituto Paulista de Pesquisa e Ensino IPEP. Apaixonado por tecnologias e games do tempo da vovó!

Deixe um comentário

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