Не получается переделать скорость скачивания в Class.
Приложение просто падает с ошибкой...
Использую данную махинацию:
static readonly string[] SizeSuffixes =
{ "bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB" };
static string SizeSuffix(Int64 value, int decimalPlaces = 1)
{
if (value < 0) { return "-" + SizeSuffix(-value, decimalPlaces); }
int i = 0;
decimal dValue = (decimal)value;
while (Math.Round(dValue, decimalPlaces) >= 1000)
{
dValue /= 1024;
i++;
}
return string.Format("{0:n" + decimalPlaces + "} {1}//s", dValue, SizeSuffixes[i]);
}
Дальше у меня есть вот такая штука:
private string speed;
private void Wc_DownloadProgressChanged(object sender, System.Net.DownloadProgressChangedEventArgs e)
{
if (prevDownloadedSize == 0)
{
prevDownloadedSize = e.BytesReceived / 1024;
}
if (stopwatch.Elapsed.TotalSeconds >= 1)
{
var dKBytes = (e.BytesReceived / 1024) - prevDownloadedSize;
currentDownloadedSize += dKBytes;
speed = String.Format("{0}", SizeSuffix(Convert.ToInt64(dKBytes / stopwatch.Elapsed.TotalSeconds)));
prevDownloadedSize = 0L;
OnProgressChanged();
stopwatch.Restart();
}
}
private void OnProgressChanged()
{
Events.DownloadProgressChangedEventArgs eventInfo;
eventInfo = new Events.DownloadProgressChangedEventArgs() { NewPercentage = GetPercentage(),
Speed = Math.Round(double.Parse(speed)), DownloadedSize = currentDownloadedSize, AllSize = downloadProvider.Size };
ProgressChanged?.Invoke(this, eventInfo);
}