我正在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个视频时不返回值,这非常有效在记忆上也可能是巨大的。
所以任何方法都可以避免这种情况/克服它或者使用不同的方法然后我会使用??
和你,先谢谢.... :)
答案 0 :(得分:0)
您有递归和重复代码。试试这个:
if (File.Exists(FileName))
{
return true;
}
else
{
wc.DownloadFileAsync(new Uri(url), FileName);
return true;
}