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.
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:
Dúvidas ou sugestões? Deixem nos comentários! Para mais dicas, acesse o nosso canal no YouTube:
https://youtube.com/criandobits
Quer receber GRÁTIS o e-book "Como Formatar um Computador em 5 Minutos"?
Sobre o Autor
0 Comentários