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
A verdade é que continuar sem esse conhecimento pode estar custando muito mais do que você imagina.
Você pode economizar centenas ou até milhares de reais ao longo do tempo fazendo você mesmo a manutenção dos seus computadores. E, se decidir prestar serviços, esse conhecimento também pode se transformar em uma fonte de renda, que pode variar de R$2.000 a R$5.000 por mês ou mais.
Tudo isso com aulas práticas, objetivas e focadas no que realmente funciona, sem enrolação:
✔ 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
A decisão é sua: continuar gastando dinheiro sempre que o computador apresentar um problema ou aprender uma habilidade que pode fazer você economizar e até gerar uma nova fonte de renda.
👉 CLIQUE AQUI AGORA e veja todos os detalhes antes que essa oportunidade passe:
Sobre o Autor

0 Comentários