C#网络客户端下载进度已更改';我不能正常工作
我正试图用C从网上下载一个文件# 通过使用WebClient对象的DownloadDataAsync方法 我还想通过使用webclient对象的DownloadProgressChanged事件来获取下载进度 问题是,BytesReceived和TotalByTestorReceive属性都没有显示正确的值。当我试着在调试时检查它们时,它们都以一种不可复制的方式发生了变化 我的代码:C#网络客户端下载进度已更改';我不能正常工作,c#,.net,file,download,webclient,C#,.net,File,Download,Webclient,我正试图用C从网上下载一个文件# 通过使用WebClient对象的DownloadDataAsync方法 我还想通过使用webclient对象的DownloadProgressChanged事件来获取下载进度 问题是,BytesReceived和TotalByTestorReceive属性都没有显示正确的值。当我试着在调试时检查它们时,它们都以一种不可复制的方式发生了变化 我的代码: WebClient client = new WebClient(); client.BaseA
WebClient client = new WebClient();
client.BaseAddress = this.DownloadUrl;
client.DownloadProgressChanged += downloadProgressDelegate;
client.DownloadDataAsync(new System.Uri(this.DownloadUrl));
我刚刚在LINQPad中尝试了以下代码:
var uri = @"http://download.services.openoffice.org/files/stable/3.3.0/OOo_3.3.0_Win_x86_install-wJRE_en-US.exe";
WebClient client = new WebClient();
client.DownloadProgressChanged += (sender, e) =>
{
Console.WriteLine("Bytes: " + e.BytesReceived + " of " + e.TotalBytesToReceive);
};
client.DownloadDataAsync(new System.Uri(uri));
Thread.Sleep(4000);
client.CancelAsync();
。。。并得到如下结果:
Bytes: 4138 of 158067944
Bytes: 50858 of 158067944
Bytes: 68378 of 158067944
Bytes: 134078 of 158067944
Bytes: 133914 of 158067944
.....
字节:158067944中的4138
字节:158067944中的50858
字节:158067944中的68378
字节:134078/158067944
字节:158067944中的133914
.....
似乎有效
编辑:可能您的HTTP服务器不正确,但我没有URI来针对
WebClient
实现测试此服务器的行为。在下载DataAsync
之后,也有类似问题,请尝试:
while (client.IsBusy) { Application.DoEvents(); }
你应该简单地“等待”它。即:
await client.DownloadDataAsync(new System.Uri(uri));
请不要忘记将您的方法转换为“异步任务”、异步任务或异步void。否则,如果您不想更改方法符号,也可以执行以下操作:
client.DownloadDataAsync(new System.Uri(uri)).Wait();
以上两种方法各有优缺点,您可以选择哪一种。您正在下载什么文件?您能否在带宽有限的情况下从本地IIS尝试一个大文件,以提供一个可复制的测试环境?这是否取决于正在下载的文件?使用
Application.DoEvents()