下载AsyncData的WebClient失败
问题描述:
我有一个格式为http://ww.url.com/page?id=200的网址。这将下载一个10 MB的文件。不过,我总是将e.ProgressPercentage设为0。但它实际上读取的结果是上传完成函数。下载AsyncData的WebClient失败
请告诉我我在做什么错在这里。
我使用以下代码
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();
}
} }
答
ProgressPercentage是基于所述的ContentLength在响应的报头中返回。如果响应不知道在将标题放在一起时的下载量有多大,则无法取得进展。
如果这只是IIS返回的文件,IIS将从文件系统获取文件的大小并为您设置标题。如果响应是动态的并且适合缓冲区,则可以设置响应的长度。但是,我相当肯定默认缓冲区大小小于10MB,因此在响应的长度已知之前将响应头发送回客户端。
在Asp.Net,你可以这样做(如果你把它取决于您的平台)...
Response.AddHeader("Content-Length", "10485760");
也许它是由您的格式造成的( - :) – 2010-12-02 21:08:30