C# 如何计算UWP BackgroundDownloader中的下载速度?

C# 如何计算UWP BackgroundDownloader中的下载速度?,c#,windows,uwp,C#,Windows,Uwp,如何计算后台下载延迟/速度,例如:367kb/s或5mb/s 到目前为止,BackgroundDownloadProgress类公开的唯一可能有用的字段是BytesReceived和TotalBytesToReceive。起初我认为我可以使用BytesReceived字段,但后来我发现它是自下载操作开始以来的累积字节,而不是新接收的块/字节 我知道一定有办法做到这一点,因为我看到商店团队已经在商店应用程序中实现了这一点: 您可以使用一个以1秒为间隔滴答作响的计时器,并计算两次滴答之间下载的字节

如何计算后台下载延迟/速度,例如:367kb/s或5mb/s

到目前为止,
BackgroundDownloadProgress
类公开的唯一可能有用的字段是
BytesReceived
TotalBytesToReceive
。起初我认为我可以使用
BytesReceived
字段,但后来我发现它是自下载操作开始以来的累积字节,而不是新接收的块/字节

我知道一定有办法做到这一点,因为我看到商店团队已经在商店应用程序中实现了这一点:


您可以使用一个以1秒为间隔滴答作响的计时器,并计算两次滴答之间下载的字节数

下面的代码是未完成的,它没有将速度格式化为MB/s,下载完成后计时器会一直滴答作响,并且不会处理诸如取消/重新启动之类的异常情况,我只是告诉您如何使用计时器和计数器进行计算

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);
}

BytesReceived
at(n)秒-
BytesReceived
at(n-1)秒应给出在n-1和n秒之间接收的字节值。这基本上就是你需要的。。