2012-04-02 11 views
2

Ich habe eine andere Frage Download :(
Ich versuche, mehrere Dateien für meine Anwendung herunterladenC# Webclient mehrere Dateien

Meine Frage ist:.. Was muss ich tun, der erste Download zu überprüfen, ob ist getan und dann zum zweiten Download fortsetzen und so weiter

Dies ist mein Code atm:

 private void DownloadBukkit() 
     { 
      MySingleton.Instance.FirstStartProgress = "Downloading Bukkit.jar... Please stand by..."; 
      webClient.DownloadFileAsync(new Uri(MySingleton.Instance.BukkitDownloadLink), Jar_Location); 
      webClient.DownloadProgressChanged += backgroundWorker1_ProgressChanged; 
      webClient.DownloadFileCompleted += (webClient_DownloadFileCompleted); 
     } 

     private void DownloadDll() 
     { 
      if (!webClient.IsBusy) 
      { 
       MySingleton.Instance.FirstStartProgress = "Downloading HtmlAgilityPack.dll... Please stand by..."; 
       webClient2.DownloadFileAsync(new Uri(Dll_HtmlAgilityPackUrl), Dll_HtmlAgilityPackLocation); 
       webClient2.DownloadProgressChanged += backgroundWorker1_ProgressChanged; 
       webClient2.DownloadFileCompleted += (webClient2_DownloadFileCompleted); 
      } 
     } 

    void webClient_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e) 
    { 
      DownloadDll(); 
    } 


    void webClient2_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e) 
    { 
     Invoke((MethodInvoker) 
       Close); 
    } 

    private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) 
     { 
      Invoke((MethodInvoker) 
        delegate 
         { 
          labelProgress.Text = MySingleton.Instance.FirstStartProgress; 
          progressBar1.Value = e.ProgressPercentage; 
         }); 
     } 

ich diesen Link überprüft haben: DownloadFileAsync multiple files using webclient aber ich nicht wirklich verstehen, wie diese :(implantieren. (Ich bin qu ie neu zu C#)

Antwort

3

Das Ereignis DownloadFileCompleted ist Ihr Signal zu wissen, dass Sie mit dem Herunterladen der Datei fertig sind.

Von MSDN:

Dieses Ereignis wird jedes Mal erhöht eine asynchrone Datei Download-Vorgang abgeschlossen ist.

Es ist nicht klar, aus dem Code, wo und wie WebClient und webClient2 deklariert sind, aber im Wesentlichen, können Sie Ihren zweiten Download starten, wenn das erste DownloadFileCompleted Ereignis ausgelöst wird. Beachten Sie jedoch, dass Sie den Download von zwei verschiedenen Dateien gleichzeitig durchführen können, vorausgesetzt Sie verwenden zwei separate Instanzen von WebClient.

+0

Okai thx! Das bedeutet, ich muss nur einen neuen Webclient in jedes DownloadFileCompleted-Ereignis einfügen? Edit: Ich habe versucht, den zweiten Download im DownloadfileCompleted-Ereignis zu starten, aber das scheint nicht zu funktionieren. –

+0

@Darkshadw Ich habe ein bisschen meine Antwort erweitert. Ich hoffe, das macht es deutlich. – Icarus

+0

#Icarus Immer wenn ich das versuche: 'WebClient webClient2 = new WebClient(); MySingleton.Instance.FirstStartProgress = "Herunterladen von Dll ... Bitte warten ..."; webClient2.DownloadFileAsync (neue Uri (Dll_HtmlAgilityPackUrl), Dll_HtmlAgilityPackLocation); ' Es möchte nicht den Download starten :(. –

0

Hier ist der Schnellvorlauf-Code, den Sie nach Ihren Anforderungen ändern können.

WebClient client = null; 
     public FileDownloader() 
     { 
      InitializeComponent(); 
      client = new WebClient(); 
      client.DownloadProgressChanged += client_DownloadProgressChanged; 
      client.DownloadFileCompleted += client_DownloadFileCompleted; 
     } 

     void client_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e) 
     { 
      lblMessage.Text = "File Download Compeleted."; 
     } 

     void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) 
     { 
      lblMessage.Text = e.ProgressPercentage + " % Downloaded."; 
     } 

     private void StartDownload(object sender, RoutedEventArgs e) 
     { 
      if (client == null) 
       client = new WebClient(); 

//Loop thru your files for eg. file1.dll, file2.dll .......etc. 
      for (int index = 0; index < 10; index++) 
      { 
       //loop on files 
       client.DownloadFileAsync(
        new Uri(
          @"http://mywebsite.com/Files/File" + index.ToString() + ".dll" 
          , UriKind.RelativeOrAbsolute), 
        @"C:\Temp\file+" + index.ToString() + ".dll"); 
      } 

     }