Ciao a tutti,
ho trovato sul web un semplice metodo per scaricare un file visualizzando una progress bar.
Funiona perfettamente se nel codice scrivo un URL statico
codice:
Private Sub ButtonDownload_Click(sender As System.Object, e As System.EventArgs) Handles ButtonDownload.Click
Dim client As WebClient = New WebClient
AddHandler client.DownloadProgressChanged, AddressOf client_ProgressChanged
AddHandler client.DownloadFileCompleted, AddressOf client_DownloadCompleted
client.DownloadFileAsync(New Uri("http://www.sito.it/file.abc"), "file.abc") 'parte del codice che da errore se invece di scrivere il link metto una variabile sting
ButtonDownload.Text = "Download in Progress"
ButtonDownload.Enabled = False
End Sub
Private Sub client_ProgressChanged(ByVal sender As Object, ByVal e As DownloadProgressChangedEventArgs)
Dim bytesIn As Double = Double.Parse(e.BytesReceived.ToString())
Dim totalBytes As Double = Double.Parse(e.TotalBytesToReceive.ToString())
Dim percentage As Double = bytesIn / totalBytes * 100
ProgressBar1.Value = Int32.Parse(Math.Truncate(percentage).ToString())
End Sub
Private Sub client_DownloadCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs)
MessageBox.Show("Download Complete")
ButtonDownload.Text = "Start Download"
ButtonDownload.Enabled = True
End Sub
Dato che l'URL da dove scaricare il file non è fisso, ma deve essere determinato, ho problemi a convertire una stringa in URI.
dim a as string 'cioè "www.sito.it/" parte fissa
dim b as string 'poi c'è la parte di autenticazione "user-password/"
dim c as string 'query da scaricare "varia a seconda del report interessato"
dim URL as string = a & b & c
Il file lo riesco a scaricare tranquillamente con il metodo classico, ma con questo sistema no, mi da errore, in pratica nel codice ci deve essere scritto l'url non una variabile.
C'è modo di risolvere? Converire?
Grazie
P.S.: Dato che il report può essere anche 10Mb questa funzione mi è molto utile, nel mio caso il report arriva a 2Mb