Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [C#]Ciclo foreach - Eseguire un download alla volta (no multi-threading)

    Salve a tutti,
    ho una lista di files da scaricare ed ho pensato di usare un cliclo foreach per scaricare i files contenuti in una lista di stringhe.
    Il problema è che col ciclo cerca di scaricarli tutti insieme e da errore.
    Vorrei raggiungere la soluzione senza il multi-threading. Vorrei che scaricasse un file alla volta e una volta terminato il download passasse al successivo.

    Consigli?

    Grazie in anticipo.
    Saluti.

  2. #2
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Devi mostrare del codice altrimenti non possiamo aiutarti.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  3. #3
    Scusa. Eccovi il source:

    codice:
    List<string> packages = new List<string>();
    
    ...
    
            private void Main_Load(object sender, EventArgs e)
            {
                getPackagesInfoFromServer();
                foreach(string package in packages){
                    ->Qui sorge il problema. Perchè se faccio cosi cerca di scaricarne tutti in sieme ma io ne voglio 1 alla volta:
                WebClient downloader = new WebClient();
                downloader.Proxy = null;
                downloader.DownloadFileAsync(blablabla);
                }
            }
    Ovviamente la funzione getPackagesInfoFromServer serve per aggiungere in packages i vari files da scaricare.

  4. #4
    Ma scusa, se usi DownloadFileAsync per forza fa download asincroni... usa la corrispondente chiamata bloccante (DownloadFile).
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Ok grazie. Provo e ti faccio sapere

  6. #6
    Ho provato ma il problema è che usando soltanto DownloadFile(blablabla) poi non posso gli eventi per mostrare % download e avvisare quando il download è finito...

  7. #7
    Anche quello è normale, se usi una chiamata bloccante e hai un solo thread (che è lo stesso della grafica) questo rimane inchiodato mentre avviene il download.
    Hai fondamentalmente due possibilità:
    - usi un backgroundworker in cui metti queste chiamate bloccanti, e aggiorni la grafica quando ciascuno dei download termina;
    - tieni le chiamate asincrone, ma fai partire solo il primo download; il download successivo viene fatto partire quando viene generato dal webclient l'evento DownloadFileCompleted.
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Ho capito solo la seconda opzione della risposta <_<

    Quindi levo il foreach e faccio scaricare solo il primo file della lista con DownloadFileAsync così ho gli eventi.
    Dopo metto che quanto il download viene completato rimuove il primo file della lista e scarica il primo file della lista (che sarebbe il secondo) e questo si ripete finchè la lista è vuota.

    Cosi' giusto?

  9. #9
    Sì, l'idea è quella.
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #10
    Grazie a te. Risolto

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.