Не проще объем скачанного разделить на время прошедшее с начала скачивания? Получите среднюю скорость скачивания.
На C# пример:
Код:
using System;
using System.ComponentModel;
using System.Drawing;
using System.Net;
using System.Windows.Forms;
namespace WinFormsDownloadFileSpeed
{
public partial class Form1 : Form
{
private WebClient Client = new WebClient();
private string url = "http://snapshot.opera.com/windows/1986_12.01-1491/Opera-Next-12.01-1491.i386.exe";
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Client.DownloadFileCompleted += new AsyncCompletedEventHandler(Client_DownloadFileCompleted);
Client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(Client_DownloadProgressChanged);
Client.DownloadFileAsync(new Uri(url), "temp.file", DateTime.Now);
}
void Client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
DateTime startTime = (DateTime)e.UserState;
double speed = (e.BytesReceived / 1024) / (DateTime.Now - startTime).TotalSeconds;
string text = String.Format("Speed: {0:F3} KB/sec", speed);
PointF drawPoint = new PointF(progressBar1.Width / 2 - 40, progressBar1.Height / 2 - 7);
progressBar1.Refresh();
progressBar1.CreateGraphics().DrawString(text, SystemFonts.DefaultFont, Brushes.Black, drawPoint);
progressBar1.Value = e.ProgressPercentage;
}
void Client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
MessageBox.Show("Downloaded!");
}
}
}