Как рассчитать скорость загрузки в UWP BackgroundDownloader? - PullRequest
0 голосов
/ 26 октября 2018

как рассчитать задержку / скорость BackgroundDownload, например: 367kb / s или 5mb / s?

на данный момент единственные потенциально полезные поля, которые я знаю, представленные классом BackgroundDownloadProgress, это BytesReceivedи TotalBytesToReceive.сначала я думал, что смогу использовать поле BytesReceived, но потом я понял, что это накопленные байты с начала операции загрузки, а не недавно полученные чанк / байты ..

available fields in BackgroundDownloadProgress

Я знаю, что должен быть способ достичь этого, потому что я видел, что команда Store реализовала это в приложении магазина:

enter image description here

1 Ответ

0 голосов
/ 26 октября 2018

Вы можете использовать таймер, который тикает с интервалом в 1 секунду, и подсчитывать загруженные байты между двумя тиками.

Следующий код является неполированным, он не форматирует скорость до МБ / с, и таймер продолжает тикать после завершения загрузки, а случай исключения, такой как отмена / перезапуск, не обрабатывается, я просто даю вам представление о том, как использовать таймер и счетчик, чтобы сделать расчет.

DispatcherTimer timer;
ulong bytesReceivedAtLastTick;

private async void StartDownload()
{
    BackgroundDownloader downloader = new BackgroundDownloader();
    DownloadOperation download = downloader.CreateDownload(source, destinationFile);
    timer = new DispatcherTimer() { Interval = TimeSpan.FromSeconds(1) };
    timer.Tick += (s, e) => {
        var bytesReceivedAtThisTick = download.Progress.BytesReceived;
        var bytesPerSecond = bytesReceivedAtThisTick - bytesReceivedAtLastTick;
        Log($"Download speed: {bytesPerSecond} B/s");
        bytesReceivedAtLastTick = bytesReceivedAtThisTick;
    };
    timer.Start();

    await download.StartAsync().AsTask(cts.Token, progressCallback);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...