我正在使用de305d54-75b4-431b-adb2-eb6b9e546014
在我的应用程序中异步下载文件。出于某种原因,在某些系统上,百分比计算错误。
我的(已更新)DownloadProgressChanged事件:
System.Net.WebClient
它应该是什么样的(Windows 8.1 64位):
它在某些系统上的外观(Windows 7 64位):
它可能与操作系统有关吗?还是其他任何想法?
更新:我完全删除了部门(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
。我认为这取决于这个人有慢的互联网连接,它不起作用。我现在只显示百分比,如果它是积极的。
答案 0 :(得分:2)
根据一些网络搜索,根据我的反编译器TotalBytesToReceive
,如果下载的大小(尚未)已知,则可以为-1。 (是的,这是一个可怕的API设计。)
保护-1案例:
if (TotalBytesToReceive == -1)
Print("Download in Progress");
else
Print(e.ProgressPercent);
目前还不清楚为什么在这台机器上不知道下载大小。也许有一个HTTP代理删除Content-Length
标头,或者Web服务器由于某种原因没有发送它。