在ProgressChanged中计算下载速率

本文关键字:下载 速率 计算 ProgressChanged | 更新日期: 2023-09-27 18:16:14

所以基本上我有一个下载文件的表单,称为file.jpg,例如每小时旋转一次,我有一个按钮开始下载,它随机下载它一段时间(主要是一个自我学习练习)。我喜欢在progressChange中添加代码,我想以某种方式获取接收到的字节数,以获得kb/s。我用谷歌搜索了一下,什么也没找到。我不需要任何花哨的网络堆栈,因为它们是标准的jpeg,所以它不会太大(事实上,当文件下载时,当我清除进度条时,我从来没有看到它开始…但是我离题了)我喜欢看到平均kb/s,即使我只看2秒(每个文件大约1兆)。如有任何帮助,不胜感激。

private void btnStart_Click(object sender, EventArgs e)
    {
        btnStart.Enabled = false;
        btnStop.Enabled = true;

        WebClient webclient = new WebClient();           
        webclient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
        webclient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);            
        // you need to increment the number !!! 
        // add the file to the list.
        // single click should preview
        // progress bar should clear after it downloads
        // the status bar as well should be done
        int num = nextIndex() + 1;
        string file = @"C:'IMG'IMG_";
        file += string.Format("{0:d5}", num);
        file += ".jpg";
        webclient.DownloadFileAsync(new Uri("http://www.foobar.com/file.jpg"), file);
        lstFiles.Enabled = false;           
    }
 private void ProgressChanged(object sender, DownloadProgressChangedEventArgs e)
    {
        // display kb/sec as well??
        pbDownload.Value = e.ProgressPercentage;
    }

在ProgressChanged中计算下载速率

private void downloadMyWorkProgress(object sender, DownloadProgressChangedEventArgs e)
{
    double bytesIn = double.Parse(e.BytesReceived.ToString());
    double totalBytes = double.Parse(e.TotalBytesToReceive.ToString());
    double percentage = bytesIn / totalBytes * 100;
    progressBar1.Value = int.Parse(Math.Truncate(percentage).ToString());
}