Scaricare file da Internet

ottobre 4, 2006

Per fare questo ci serviremo della classe System.Net.WebClient che fornisce tutti i metodi necessari. Per cominciare, basta creare una nuova variabile globale di tipo System.Net.WebClient:
Public Withevents TCP As New System.Net.WebClient
Abbiamo specificato la parola chiave Withevents per indicare al compilatore che di questa calsse useremo anche i suoi eventi: quindi potremo scrivere direttamente eseguite quando si generano eventi in TCP.
Per iniziare un download useremo il metodo DownloadFileAsync, che non solo ci permette di scaricare il file specificato nella locazione specificata (come vedremo tra breve), ma non blocca il form e consente di svolgere tutti gli eventi anche durante il download: l’unica pecca che ha è che utilizza un po’ più di tempo ad inizializzare il primo download, ma ci si può abituare. La sintassi è la seguente:
TCP.DownloadFileAsync(URL As Uri, Destination As String)
La classe Uri (System.Uri) indica univocamente un file sul web e consente di vederne le proprietà: a noi serve, però, solamente l’indirizzo sotto forma di stringa, poichè creeremo al momento una nuova variabile di tipo Uri contenente quell’indirizzo, senza bisogno di complicarsi molto la vita. Ad esempio:
TCP.DownloadFileAsync(New Uri("indirizzo url"), "destinazione su hard disk")
In questo modo inizierà il download.
Altri importanti metodi e proprietà di questa classe:

  • CancelAsync : interrompe il download corrente
  • IsBusy : restituisce vero se è in corso un download, altrimenti falso

Gestire gli eventi
Ora passiamo a gestire due importantissimi eventi, generati rispettivamente quando ci è un progresso nel download (ad esempio per modificare il valore di una progressbar) e quando un download viene completato (ad esempio per segnalarlo). Useremo per il primo una sintassi del genere:
Private Sub PrgChngd(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Handles TCP.DownloadProgressChanged
e.ProgressPercentage 'restituisce la percentuale del download
e.BytesReceived 'restituisce il numero di bytes ricevuti
e.TotalBytesToReceive 'restituisce il numero dei byte da ricevere
End Sub

e:
Private Sub PrgComplete(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) Handles TCP.DownloadFileCompleted
If e.Cancelled = True Then
'il download è stato cancellato
Else
'il download è stato completato
End If
End Sub