概念:我正在制作一个从给定 URL 下载文件的 C# 应用程序。文本框,添加的 url,文件下载,每个事件都以正确的方式发生。
我正在尝试重新创建此程序以逐个下载多个文件。我有一个带有一个 url/line 的文本框,解析正确,我将所有链接放在一个字符串数组中,该数组放在文本框中。然后它开始异步下载,我想让它只下载一个,所以我在foreach循环中做了一个while循环,因为我不想在当前一个url完成下载之前转到下一个url。
问题是:我进入了一个无限循环(虽然我之前做了这个工作(idk how),如果我在while循环中放置了一个消息框(注意:我在一分钟前重试,这次没有成功) )。
我将只显示代码片段:
foreach (string url in urllist)
{
isdonwloaded = false;
string filename = url.Split('/').Last();
label3.Text = filename;
webclient.DownloadFileAsync(new Uri(url), @"C:\Users\Krisz" + @"\" + filename);
while (!isdonwloaded) // this was the first idea, but with webclient.IsBusy it did the same thing
{
// MessageBox.Show(counter);
Thread.Sleep(1000);
label8.Text = "Download in progress...";
}
counter++;
label8.Text = "Done!";
}
// Events:
webclient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(webc_DownloadProgressChanged);
webclient.DownloadFileCompleted += new AsyncCompletedEventHandler(webc_DownloadFileCompleted);
// The DownloadFileCompleted event:
void webc_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
label7.Text = String.Format("Files {0} / {1}", counter, arraylength(urllist));
isdonwloaded = true;
}
我研究了这个线程:WebClient.DownloadFileAsync - 一次下载一个文件,但我无法让它以这种方式工作。(也许我误解了什么?)
有人可以给我一些提示,我做错了什么?我从来没有真正使用过事件,所以遇到错误只是时间问题。非常感谢每一点帮助,这个程序对我来说将是一个有用的程序。