【问题标题】:DownloadAsyncData of WebClient failsWebClient 的 DownloadAsyncData 失败
【发布时间】:2010-12-02 20:43:20
【问题描述】:

我有一个格式为http://ww.url.com/page?id=200 的网址。这将下载一个 10 MB 的文件。但是,我总是将 e.ProgressPercentage 设为 0。但它正在使用实际结果读取的上传完成功能。

请告诉我我在这里做错了什么。

我正在使用以下代码

private void button1_Click(object
    sender, EventArgs e)
{

    WebClient webClient = new WebClientEx();

    webClient.DownloadProgressChanged +=
        new DownloadProgressChangedEventHandler(wc_DownloadProgressChanged);

    webClient.DownloadDataCompleted += new
        DownloadDataCompletedEventHandler(wc_DownloadComplete);

    webClient.DownloadDataAsync(new Uri("http://ww.url.com/page?id=200"));


}

public void wc_DownloadProgressChanged(Object sender, 
    DownloadProgressChangedEventArgs e)

{
    Progress1.Value = e.ProgressPercentage; // this is 0
}

public void wc_DownloadComplete(Object sender,DownloadDataCompletedEventArgs e)

{
    int a = 0;
    this.Close();
}
} }

【问题讨论】:

  • 可能是你的格式(-:)引起的
  • 请注意:您的 CompletedEvent 缺少错误处理。

标签: c# winforms .net-3.5 download webclient


【解决方案1】:

ProgressPercentage 基于响应标头中返回的 ContentLength。如果响应在将标头放在一起时不知道下载量有多大,您将无法获得进度。

如果这只是 IIS 返回的文件,IIS 会从文件系统中获取文件的大小并为您设置标题。如果响应是动态的并且适合缓冲区,则可以设置响应的长度。但是,我相当确定默认缓冲区大小小于 10MB,因此响应标头会在响应长度已知之前发送回客户端。

在 Asp.Net 中,您会这样做(放置位置取决于您的平台)...

Response.AddHeader("Content-Length", "10485760");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多