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个视频,它可能在内存上也很大。
所以任何方式来避免这个/克服它或可能是一种不同的方法,然后我使用??
和雅,在此先感谢.... :)
哎@blam,感谢您的回复.....我现在对重复的代码,但我不能使用你所提到的BCOS作为coode你可以看到下一个文件被称为从下载事件完成处理程序,我需要调用....使用返回true如果文件存在将只是终止代码,然后在那里....因此重复的代码.... – user1260042 2012-03-10 05:58:06