Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#网络客户端下载进度已更改';我不能正常工作_C#_.net_File_Download_Webclient - Fatal编程技术网

C#网络客户端下载进度已更改';我不能正常工作

C#网络客户端下载进度已更改';我不能正常工作,c#,.net,file,download,webclient,C#,.net,File,Download,Webclient,我正试图用C从网上下载一个文件# 通过使用WebClient对象的DownloadDataAsync方法 我还想通过使用webclient对象的DownloadProgressChanged事件来获取下载进度 问题是,BytesReceived和TotalByTestorReceive属性都没有显示正确的值。当我试着在调试时检查它们时,它们都以一种不可复制的方式发生了变化 我的代码: WebClient client = new WebClient(); client.BaseA

我正试图用C从网上下载一个文件# 通过使用WebClient对象的DownloadDataAsync方法

我还想通过使用webclient对象的DownloadProgressChanged事件来获取下载进度

问题是,BytesReceived和TotalByTestorReceive属性都没有显示正确的值。当我试着在调试时检查它们时,它们都以一种不可复制的方式发生了变化

我的代码:

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()