C# 如何获得估计下载时间
因此,我正在用C#winforms创建一个web浏览器,对于下载表单,我需要获得估计的下载时间。我正在使用System.Net.WebClient类进行下载。以下是迄今为止的代码:C# 如何获得估计下载时间,c#,winforms,C#,Winforms,因此,我正在用C#winforms创建一个web浏览器,对于下载表单,我需要获得估计的下载时间。我正在使用System.Net.WebClient类进行下载。以下是迄今为止的代码: private void Client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) { Invoke(new MethodInvoker(delegate () { progressB
private void Client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
Invoke(new MethodInvoker(delegate ()
{
progressBar1.Minimum = 0;
double recieve = double.Parse(e.BytesReceived.ToString());
double total = double.Parse(e.TotalBytesToReceive.ToString());
double percentage = recieve / total * 100;
label7.Text = percentage.ToString() + "% complete";
progressBar1.Value = int.Parse(Math.Truncate(percentage).ToString());
}));
}
您只能在下载了部分内容后估算时间。开始下载时启动秒表
private readonly秒表_StopWatch=new();
收到的私人long_TotalBytes;
开始下载
_stopWatch.Restart();
_totalBytesReceived=0;
开始下载();
在客户端\u下载进度更改中
:
long received=e.bytesreived;
_totalBytesReceived+=已接收;
长TotalEstimateMilliseconds=
_stopWatch.elapsedMills*e.TotalByTest或Receive/_totalBytesReceived;
所有这些数字都表示为long
。将它们转换为string
仅仅是将它们解析为double
,然后截断double
并再次转换为字符串以供显示是没有意义的。只需在整个过程中保持的长度
long
始终是一个整数,不需要截断
你可以免费得到这个百分比,因为。智能感知揭示了这一点。(你仍然需要计算估计的时间)。如果不下载一些数据,你就不能这样做。URL有多个跃点。速率将是连接中最慢的跃点。因此,有些跳数可能是10米,有些是100米,还有一些是光纤跳数。估计数可以通过多种方式计算出来,但目前还不清楚你在寻找哪种方法。例如,您可以说
timeTakenSoFar/percentReceived
,或者计算最后一秒的下载速度乘以仍然缺少多少数据。一个估计值是否有用,尽管它可以波动多少?你为什么要在那里调用它?该事件在同一个线程上引发,因此现在在UI线程上调用Invoke()。不要那样做。