mi sembra un pò troppo complicato per me non ci capisco nulla non capisco neanche da dove iniziare![]()
mi sembra un pò troppo complicato per me non ci capisco nulla non capisco neanche da dove iniziare![]()
Beh, non ho deciso io di scrivere un programma senza avere - probabilmente - tutte le conoscenze necessarie ...Originariamente inviato da NuovoNomeUtente
mi sembra un pò troppo complicato per me non ci capisco nulla non capisco neanche da dove iniziare![]()
Comunque, qual è il codice *attuale* e completo che hai scritto per la lettura ciclica della lista con la visualizzazione della dimensione dei file e la percentuale di download?
Codice che funzioni, almeno, per il primo download ?
No MP tecnici (non rispondo nemmeno!), usa il forum.
allora questo è il codice funzionante per il download:
non pensavo fosse così complicato :Scodice:Private Sub down_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles down.Click download = New WebClient Dim save As String save = urltxt.Text.Split("/"c)(urltxt.Text.Split("/"c).Length - 1) If urltxt.Text = "http://" Then MsgBox("Riempi l'url!!", MsgBoxStyle.Critical) Else download.DownloadFileAsync(New Uri(urltxt.Text), brwtxt.Text + save) End If End Sub Private Sub download_DownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Handles download.DownloadProgressChanged Dim dimensionitotali As String Dim dimensioniscaricate As String dimensionitotali = e.TotalBytesToReceive / 1048576 dimensioniscaricate = e.BytesReceived / 1048576 dimen.Text = FormatNumber(dimensionitotali, 2) + " MB / " + FormatNumber(dimensioniscaricate, 2) + " MB" ProgressBar1.Value = e.ProgressPercentage perc.Text = ProgressBar1.Value End Sub Private Sub brw_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles brw.Click Dim salvaree As New SaveFileDialog salvaree.Title = "Salva in.." salvaree.ShowDialog() brwtxt.Text = salvaree.FileName End Sub
Dato che siamo all'interno dello stesso thread, non utilizzare il mio suggerimento precedente ... magari lo userai quando farai una versione multithread.
Adesso ti basta utilizzare la
e dichiarare una variabile nella classecodice:Imports System.Threading
Poi, subito prima del DownloadFileAsync scrivicodice:Private flDow As Boolean
e subito dopocodice:flDow = True
Infine, dovrai utilizzare l'evento download_DownloadFileCompleted, in cui scriveraicodice:While flDow Application.DoEvents() Thread.CurrentThread.Sleep(20) End While
codice:flDow = False
No MP tecnici (non rispondo nemmeno!), usa il forum.
ok grazie
adesso funziona però non capisco come fare a spostare la selezione dentro la listbox
cioè:
Ho provato pure con ListBox1.Select ma non funzionacodice:ab = ListBox1.SelectedItem <-- così mi scarica solo il primo file e appena finisce mi continua a scaricare quello ab = ListBox1.SelectedItem(numX) <-- così mi da che l'URL non è giusto e si blocca tutto questo è tutto il codice: Private Sub down_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles down.Click download = New WebClient Dim save As String Dim ab As String save = ListBox1.Text.Split("/"c)(ListBox1.Text.Split("/"c).Length - 1) If urltxt.Text = "http://" Then MsgBox("Riempi l'url!!", MsgBoxStyle.Critical) Else For numX = 1 To ListBox1.Items.Count() ab = ListBox1.SelectedItem flDow = True download.DownloadFileAsync(New Uri(ab), brwtxt.Text + save) While flDow Application.DoEvents() Thread.Sleep(20) End While Next End If End Sub![]()
Questo è un altro problema che dovresti spiegare meglio ...
Come sono inseriti i dati che ti servono nella Listbox?
A che serve la Split ?
Cosa è urltxt ?
A cosa serve save?
No MP tecnici (non rispondo nemmeno!), usa il forum.
Ci sono riuscito![]()
il problema è che far partire i download devo premere 2 volte su download e non capisco perchè o_o"
save è il "nome del file con l'estensione" lo split ecc servono per andarlo a prendere direttamente da l'url che sta scaricando, mentre urltxt è il come della textbox in cui inserisci l'url che poi va aggiunto alla listbox!
l'unica cosa adesso è che non capisco perchè devo premere 2 volte il tasto download prima che parti a scaricare .____.codice:Private Sub down_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles down.Click download = New WebClient Dim save As String Dim menouno As String save = ListBox1.Text.Split("/"c)(ListBox1.Text.Split("/"c).Length - 1) If urltxt.Text = "http://" Then MsgBox("Riempi l'url!!", MsgBoxStyle.Critical) Else For numX = 1 To ListBox1.Items.Count() menouno = (numX - 1) ListBox1.SetSelected(menouno, True) flDow = True download.DownloadFileAsync(New Uri(ListBox1.SelectedItem), brwtxt.Text + save) While flDow Application.DoEvents() Thread.Sleep(20) End While Next End If End Sub
EDIT: per visualizzare la velocità di download che operazione devo fare?
DownloadFileAsync non ha la possibilità di visualizzarla..ho a disposizione i byte che scarica e i byte totali del file..
Scusate il doppio post ma non mi fa editare
dunque sono riuscito a capire come contare la velocità di download, ma va in conflitto con
e non ne capisco il motivo, qui c'è il pezzo di codice che conta i secondi:codice:While flDow Application.DoEvents() Thread.Sleep(20) End While
ho messo un timer impostato a 1000..dovrebbe funzionare ma va in conflitto con Application.DoEvents() come posso risolvere????codice:Private Sub download_DownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Handles download.DownloadProgressChanged Dim dimensionitotali As String Dim dimensioniscaricate As String Dim temposs As String Timer1.Start() temposs = Label5.Text Dim bytericevuti As Long = e.BytesReceived Dim kbz As Double = bytericevuti / (temposs * 1024) dimensionitotali = e.TotalBytesToReceive / 1048576 dimensioniscaricate = e.BytesReceived / 1048576 dimen.Text = FormatNumber(dimensionitotali, 2) + " MB / " + FormatNumber(dimensioniscaricate, 2) + " MB" ProgressBar1.Value = e.ProgressPercentage perc.Text = ProgressBar1.Value Label6.Text = kbz + "KB/s" End Sub![]()
Guarda, non è facile risponderti .... se spiegherai meglio (ma molto meglio di come hai fatto) a cosa servono tutti gli elementi del programma, forse si può azzardare una risposta ...Originariamente inviato da NuovoNomeUtente
l'unica cosa adesso è che non capisco perchè devo premere 2 volte il tasto download prima che parti a scaricare .____.
Questa informazione non c'è. Devi calcolarla tu.per visualizzare la velocità di download che operazione devo fare?
DownloadFileAsync non ha la possibilità di visualizzarla..ho a disposizione i byte che scarica e i byte totali del file..
No MP tecnici (non rispondo nemmeno!), usa il forum.
il fatto del premere 2 volte il tasto per scaricare non è un problema piu' che altro perchè ne è insorto un altro, visual basic da come errore questa parte di codice:
non riesco a capire il motivo, è da quanto ho aggiunto la velocità di download qui c'è il pezzo di codice:codice:While flDow Application.DoEvents() Thread.Sleep(20) End While
non c'è molto da spiegare, c'è un timer che conta i secondi e parte quando partono i download poi c'è l'operazione per ricavare la velocità che è i bytes ricevuti diviso il tempo che è trascorso moltiplicato per 1024codice:Private Sub download_DownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Handles download.DownloadProgressChanged Dim dimensionitotali As String Dim dimensioniscaricate As String Dim temposs As String Timer1.Start() temposs = Label5.Text Dim bytericevuti As Long = e.BytesReceived Dim kbz As Double = bytericevuti / (temposs * 1024) dimensionitotali = e.TotalBytesToReceive / 1048576 dimensioniscaricate = e.BytesReceived / 1048576 dimen.Text = FormatNumber(dimensionitotali, 2) + " MB / " + FormatNumber(dimensioniscaricate, 2) + " MB" ProgressBar1.Value = e.ProgressPercentage perc.Text = ProgressBar1.Value Label6.Text = kbz + "KB/s" End Sub
la velocità dovrebbe comparire in un label che ho messo, come già detto va in conflitto con la parte di codice che mi avevi suggerito te e che funzionava fino a prima di aver inserito queste ultime cose..