2010-12-02 57 views
0

我有一个格式为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(); 
} 
} } 
+0

也许它是由您的格式造成的( - :) – 2010-12-02 21:08:30

回答

0

ProgressPercentage是基于所述的ContentLength在响应的报头中返回。如果响应不知道在将标题放在一起时的下载量有多大,则无法取得进展。

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

在Asp.Net,你可以这样做(如果你把它取决于您的平台)...

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