【发布时间】:2023-04-01 10:39:01
【问题描述】:
概念:我正在制作一个从给定 URL 下载文件的 C# 应用程序。文本框,添加 url,文件下载,每个事件都以正确的方式发生。
我正在尝试重新创建此程序以逐个下载多个文件。我有一个带有一个 url/line 的文本框,解析正确,我将所有链接放在一个字符串数组中,该数组放在文本框中。然后它开始异步下载,我想让它只下载一个,所以我在foreach循环中做了一个while循环,因为我不想在当前一个url完成下载之前转到下一个url。
问题是:我进入了一个无限循环(虽然我之前做过这个工作(idk how),如果我在 while 循环中放置了一个消息框(注意:我在一分钟前重试,它没有成功这次))。
我将只显示代码 sn-p:
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 - Download files one at a time,但我无法让它以这种方式工作。 (也许我误解了什么?)
谁能给我一些提示,我做错了什么?我从来没有真正使用过事件,所以遇到错误只是时间问题。 非常感谢每一点帮助,这个程序对我来说很有用。
【问题讨论】:
-
我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
-
哦,好吧。 :D 对不起,我确实提到这是我的第一篇文章。谢谢指正,下次我会处理这些的。
-
没问题。既然你喜欢那个,这里是另一个:与论坛网站不同,我们不使用“谢谢”或“任何帮助表示赞赏”,或Stack Overflow 上的签名。请参阅“Should 'Hi', 'thanks,' taglines, and salutations be removed from posts?.
标签: c# multithreading download webclient