2012-03-09 122 views
0

我正在wpf中创建一个文件下载器,它从给定的文件列表中下载并显示单个下载进度条....列表可能高达1000文件。在WPF中创建一个http多文件下载器

我已经得到了所有的代码和细节,但我坚持一件事....如何排队文件。考虑下面的代码:

private bool Download(String url, int i) 
     { 
      String FileName = "some location.mp4"; 
      label2.Content = "Downloading : " + ht[current.ToString()].ToString(); 
      progressBar1.Value = 0;    
      try 
      { 
       if (url.Equals(Constants.NotFound)) 
        return false; 

       if (File.Exists(FileName)) 
       {      
        current++; 
        if (current <= total)             
         Download(ht[current.ToString()].ToString(), current); 
        else 
        { 
         this.WindowState = System.Windows.WindowState.Normal; 
         MessageBox.Show("Download Finished"); 
        } 

        return true; 
       } 
       wc.DownloadFileAsync(new Uri(url), FileName);     
       return true; 
      } 
      catch 
      { return false; } 
     } 

要捕获完整的事件,我已经写了事件的完整的处理程序,所以:

void wc_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e) 
    { 
     current++;    
     if (current <= total) 
      Download(ht[current.ToString()].ToString(), current); 
     else 
     { 
      progressBar1.Value = 100;     
      label2.Content = "Download Finished."; 
      label1.Content = "100 %"; 

      this.WindowState = System.Windows.WindowState.Normal; 
      MessageBox.Show("Download Finished"); 
     } 
    } 

这个完美的作品时,下载没有文件已经存在,但是当文件预先存在,那么下载函数就会成为一个递归循环,直到后面的函数调用返回时才会返回值,并且考虑到1000个视频,它可能在内存上也很大。

所以任何方式来避免这个/克服它或可能是一种不同的方法,然后我使用??

和雅,在此先感谢.... :)

回答

0

您有递归和重复的代码。试试这个:

  if (File.Exists(FileName)) 
      {      
       return true; 
      } 
      else 
      { 
       wc.DownloadFileAsync(new Uri(url), FileName);     
       return true; 
      } 
+0

哎@blam,感谢您的回复.....我现在对重复的代码,但我不能使用你所提到的BCOS作为coode你可以看到下一个文件被称为从下载事件完成处理程序,我需要调用....使用返回true如果文件存在将只是终止代码,然后在那里....因此重复的代码.... – user1260042 2012-03-10 05:58:06

相关问题