C# 如何获得估计下载时间

C# 如何获得估计下载时间,c#,winforms,C#,Winforms,因此,我正在用C#winforms创建一个web浏览器,对于下载表单,我需要获得估计的下载时间。我正在使用System.Net.WebClient类进行下载。以下是迄今为止的代码: private void Client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) { Invoke(new MethodInvoker(delegate () { progressB

因此,我正在用C#winforms创建一个web浏览器,对于下载表单,我需要获得估计的下载时间。我正在使用System.Net.WebClient类进行下载。以下是迄今为止的代码:

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()。不要那样做。