Jump to content
Meron95

Editado

Recommended Posts

ribeiro55

Private WithEvents httpclient As New WebClient

Essa classe precisa de ser instanciada e inicializada, não apenas referenciada.

É como estares a fazer Nothing.DownloadFileAsync, apenas onde Nothing é do tipo WebClient.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
ribeiro55

É uma operação assíncrona, ou seja, o fluxo da execução não espera que o método downloadasync termine e passa logo para a linha seguinte, que é a messagebox.

Numa operação assíncrona, não consegues prever nunca quando termina e a única forma de saberes quando termina é ser ela própria a avisar que terminou.

A classe WebClient tem um evento chamado DownloadFileCompleted, que é disparado quando a operação termina.

É no handler desse evento que vais meter a messagebox.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
ribeiro55

Então para que raio queres tu utilizar um método assíncrono?

Funcionar não significa que seja boa prática.

Imagina que arrancas o cabo de rede a meio do download. O goto vai correr até te limpar a memória toda.

Ao passo que o objecto até pode ter um evento para disparar quando a coisa corre mal.

Imagina também que queres fazer 100 downloads.

É melhor ficar à espera que cada um dos 100 termine, por sua vez, ou lançar os pedidos assíncronos à molhada e eles que se vão acusando quando lhes apetecer, ficando a tua aplicação a pesar quase nada na memória?


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
ribeiro55

Isso é porque só é possível com uma operação assíncrona.

Não conseguias de outra forma fazer uma chamada e receber feedback de uma instância para a mesma thread principal da aplicação, porque o fluxo de execução é único.

Uma vez utilizando operação assíncrona, só faz sentido utilizares os seus eventos.

O próprio progresso de download é um evento que a classe dispara sempre que consegue sacar mais um pouco do ficheiro.

Eventos são uma parcela do todo, que é quase essencial aprender e dominar. ;)

Usa o evento DownloadFileCompleted e esquece lá os GoTos que isso é matéria do século passado.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.