Oppure

Loading
08/05/12 20:12
Brenza
Ciao a tutti, ho scritto un programma che esegue il download di una serie di files,

msgbox("Inizio download")
My.Computer.Network.DownloadFile("http:\esempio1.txt", "Temp\a.txt")
msgbox("File 1 scaricato")
My.Computer.Network.DownloadFile("http:\esempio2.txt", "Temp\b.txt")
msgbox("File 2 scaricato")
My.Computer.Network.DownloadFile("http:\esempio3.txt", "Temp\c.txt")
msgbox("File 3 scaricato")
My.Computer.Network.DownloadFile("http:\esempio4.txt", "Temp\d.txt")
msgbox("File 4 scaricato")



Arrivato alla seconda istruzione (quella che esegue il primo download) il programma si blocca per circa 12 secondi come se fosse crashato per poi riprendere a funzionare normalmente fino alla fine della funzione...

Come mai? C'è modo di evitare la cosa o almeno di ridurre i tempi di attesa?
Grazie di cuore a chi mi risponderà! :D
Ultima modifica effettuata da Brenza 28/05/12 15:53
aaa
08/05/12 20:16
GN
A prima vista mi sembra che quei 12 secondi siano... il tempo necessario per scaricare File1! Prova ad accedere al file remoto via browser: se è necessario lo stesso tempo, significa che l'unico fatto da cui dipende il tempo di attesa è la velocità della rete.
aaa
08/05/12 23:21
Brenza
No no, tutti i files che metto in download sono txt da pochi byte ognuno e su per giù tutti delle stesse dimensioni!

Anche provando a cambiare l'ordine in cui scarico i file a farmi attendere più di mezzo secondo è sempre e solo il primo dei quattro! =(
aaa
09/05/12 7:34
lorenzo
Probabilmente la prima volta perdi più tempo perché deve essere aperta una nuova connessione, che poi viene sfruttata per il download degli altri files...
aaa
09/05/12 8:24
HeDo
evidentemente c'è qualche inizializzazione della classe Network.
prova ad usare WebClient (msdn.microsoft.com/en-us/library/…)

inoltre sconsiglio sempre di scrivere del codice che potrebbe prendere più di qualche millisecondo in un event handler. è sempre bene iniziare un'operazione asincrona in un altro thread e tornare immediatamente dal gestore dell'evento in modo da mantenere la UI fluida.

a tal proposito guarda la classe Task (msdn.microsoft.com/en-us/library/…)
aaa
09/05/12 13:38
Dark_light
Ciao, come suggerito da HeDo, utilizza un'operazione asincrona.

Un esempio potrebbe essere:
 download.DownloadFileAsync(New Uri("sito"), SaveFileDialog1.FileName)


;)
aaa
09/05/12 18:51
Brenza
Grazie mille ad entrambi,
Purtroppo per questo particolare progetto ho bisogno che il il download del file venga completato prima che venga mostrato il form di avvio del programma ma nei progetti futuri terrò in considerazione i vostri consigli!

Speravo ci fosse un modo ridurre i tempi di attesa ma mi sa che non c'è niente che si possa fare, magari farò apparire uno splashscreen per tentare di mascherare il ritardo... :P
Di nuovo grazie, se per caso vi venisse in mente qualcosa mi raccomando scrivete! ;)
aaa
09/05/12 19:25
Dark_light
Bisogna chiarire di che tempi d'attesa si sta parlando.
Se si tratta dell'attesa dovuta alle dimensioni del file mi pare più che normale .
Se invece è un'attesa dovuta ad altro, come ti ho suggerito prima, usa il metodo asincrono.
Se proprio vuoi creare qualche "intrattenimento", puoi usare la progress bar.
aaa