C # / WebClient Скачать файл и рассчитать оставшееся время - PullRequest
0 голосов
/ 15 марта 2020

Я пытаюсь рассчитать оставшееся время для файла, который я загружаю.

Вот мой код:

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, что неверно. Где моя ошибка, почему не правильно рассчитывается время?

...