0

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

我已经完成了所有的代码和细节,但我被困在一件事上……如何对文件进行排队。考虑下面的代码:

 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个视频,它可能是巨大的也在内存上。

所以有什么方法可以避免/克服它,或者我正在使用不同的方法??

和你,提前谢谢.... :)

4

1 回答 1

0

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

            if (File.Exists(FileName))
            {                      
                return true;
            }
            else 
            {
                wc.DownloadFileAsync(new Uri(url), FileName);                   
                return true;
            }
于 2012-03-09T19:53:18.373 回答