Я пытаюсь рассчитать оставшееся время для файла, который я загружаю.
Вот мой код:
public void DownloadGame()
{
long totalRecieved = 0;
DateTime lastProgressChange = DateTime.Now;
Stack<int> timeSatck = new Stack<int>(5);
Stack<long> byteSatck = new Stack<long>(5);
using (WebClient c = new WebClient())
{
c.DownloadProgressChanged += delegate (object s, DownloadProgressChangedEventArgs args)
{
long bytes;
if (totalRecieved == 0)
{
totalRecieved = args.BytesReceived;
bytes = args.BytesReceived;
}
else
{
bytes = args.BytesReceived - totalRecieved;
}
timeSatck.Push(DateTime.Now.Subtract(lastProgressChange).Seconds);
byteSatck.Push(bytes);
double r = timeSatck.Average() * ((args.TotalBytesToReceive - args.BytesReceived) / byteSatck.Average());
MainWindowViewModel.Instance.ProgressStatus = "Remaining time: " + (r / 60).ToString();
Trace.WriteLine("Remaining time: " + (r / 60).ToString());
totalRecieved = args.BytesReceived;
lastProgressChange = DateTime.Now;
};
string gamezipUrl = GameUpdaterModel.serverUrl + "versions/" + GameUpdaterModel.DetermineOS().ToString().ToLower() + "/current/" + GameUpdaterModel.versionsList.First().version + ".zip";
c.DownloadFileAsync(new Uri(gamezipUrl), GameUpdaterModel.gameDir+"\\7.zip");
}
}
Файл загружается нормально, и это нормально, однако оставшееся время всегда остается на 0
, что неверно. Где моя ошибка, почему не правильно рассчитывается время?