WebClient DownloadFile显示错误的百分比

时间:2015-07-04 23:56:10

标签: c# webclient

我正在使用de305d54-75b4-431b-adb2-eb6b9e546014在我的应用程序中异步下载文件。出于某种原因,在某些系统上,百分比计算错误。

我的(已更新)DownloadProgressChanged事件:

System.Net.WebClient

它应该是什么样的(Windows 8.1 64位):

How it should look like

它在某些系统上的外观(Windows 7 64位):

How it looks on some systems

它可能与操作系统有关吗?还是其他任何想法?

更新:我完全删除了部门(WebClient client = new WebClient(); client.DownloadProgressChanged += (_sender, _e) => { double bytesIn = _e.BytesReceived; double totalBytes = _e.TotalBytesToReceive; double percentage = bytesIn / totalBytes * 100; UpdateConnectingStatus("Missionsdatei wird heruntergeladen... (" + Math.Truncate(percentage).ToString() + "%)"); }; ),但它在同一系统上无效。

更新2:我检查了totalBytes的值。 totalBytes的结果在它不起作用的系统上为-1。任何想法为什么会这样?

更新3:我仍然没有解决方案,尽管我试图删除字符串转换内容并向分区添加/ 1000000。我认为这取决于这个人有慢的互联网连接,它不起作用。我现在只显示百分比,如果它是积极的。

1 个答案:

答案 0 :(得分:2)

根据一些网络搜索,根据我的反编译器TotalBytesToReceive,如果下载的大小(尚未)已知,则可以为-1。 (是的,这是一个可怕的API设计。)

保护-1案例:

if (TotalBytesToReceive == -1)
 Print("Download in Progress");
else
 Print(e.ProgressPercent);

目前还不清楚为什么在这台机器上不知道下载大小。也许有一个HTTP代理删除Content-Length标头,或者Web服务器由于某种原因没有发送它。