VB .NET - Fazendo o download de arquivos


Como realizar operações de processamento de dados em segundo plano(de modo assíncrono) e manter a sua interface com o usuário ativa e respondendo a interações dos usuários ?

Utilize a classe BackgroundWorker para gerenciar as interações entre o processo principal e thread ativa.

Qual a vantagem de usar este controle se posso eu mesmo fazer o serviço através de threads ? A vantagem é que o componente já oferece eventos que interagem com outras threads, eventos que você teria que criar via código.

Como exemplo temos o evento DoWork que é disparado quando é iniciado o trabalho que este terá que fazer e o evento RunWorkerCompleted que é acionado quando o processo assíncrono, que está sendo executado, for terminado.

Veja na tabela abaixo alguns dos eventos deste controle e sua descrição:

Evento Descrição 
DoWork Ocorre quando RunWorkAsync é chamado. Este evento inicia o processamento assíncrono.
ProgressChanged Ocorre quando ReportProgress é chamado.Utilizado fazer uma notificação de progressão do processamento.
RunWorkerCompleted Ocorre quando a operação assíncrona é encerrada, ou quando uma exceção é disparada.

Este artigo apresenta um programa que usa este recurso e mostra o resultado do download de arquivos em uma barra de progresso sendo que o arquivo pode ser salvo em um local escolhido pelo usuário.

Abaixo vemos a interface visual do programa em uma aplicação Windows Forms.

Pegue o projeto completo aqui:  DownloadArquivos.zip
Eu sei é apenas VB .NET mas eu gosto...
Simples, simples assim...
Referências:

José Carlos Macoratti