【问题标题】:Code fails to download a file more than once代码多次下载文件失败
【发布时间】:2011-05-10 16:02:49
【问题描述】:

每当我单击 GUI 中的按钮时,都会执行此代码

this.file_name = @"c:\temp\file_" + DateTime.Now.Ticks / 10000 +".pdf";

client.DownloadFileCompleted +=
                    new AsyncCompletedEventHandler(pdfDownloadComplete);

client.DownloadFileAsync(new Uri(uri), file_name);

它应该下载一个pdf文件。我第一次点击它工作正常,但第二次它所做的只是在临时目录中创建一个空文件并且什么都不下载,然后我点击相同的按钮没有任何新的事情发生。

我不明白为什么它不会下载多次。

稍后编辑

这是http://pastie.org/private/y7na2f4fjdu6anzteoa所需的完整代码

我注意到,如果我删除检查内容类型的下载,应用下载文件没有问题

client.HeadOnly = true;
byte[] body = client.DownloadData(uri); // note should be 0-length
string type = client.ResponseHeaders["content-type"];
client.HeadOnly = false;

不过,我需要知道我是否从该 URL 获取文件的文本,因此我需要进行该调用。

【问题讨论】:

  • client 是什么类型的? pdfDownloadComplete 是做什么的?
  • 我添加了更多代码,这样事情就更清楚了。 pdfDownloadComplete 是一个空函数。

标签: c# download webclient


【解决方案1】:

您的代码至少有一个问题可能是问题的根源:
您在 using 块内进行异步下载。我真的不知道如果离开 using 块的范围时下载仍在运行会发生什么,但我猜它被取消了。您应该使用DownloadFile 而不是DownloadFileAsync 来避免这个问题。
此外,当您使用普通的WebClient 类而不是您的MyClient 类时,请检查它是否有效。

【讨论】:

  • 我尝试同时使用DownloadFileDownloadFileAsync,它们都给出了相同的结果。我使用MyClient 类来获取在 URL 中找到的内容的内容类型,所以我知道我得到了一个文件或文本(以防出错)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-01
  • 1970-01-01
相关资源
最近更新 更多