如何使下载操作更频繁地调用进度更改事件

本文关键字:调用 事件 何使 下载 操作 | 更新日期: 2023-09-27 17:56:24

我正在开发一个UWP应用程序,通过互联网下载一些文件。我使用BackgroundDownloader类在后台下载它们。这是我的代码片段。

public BackgroundDownloader backgroundDownloader = new BackgroundDownloader();
DownloadOperation downloadOperation = backgroundDownloader.CreateDownload(source, file);
Progress<DownloadOperation> progress = new Progress<DownloadOperation>(progressChanged);
CancellationTokenSource cancellationToken = new CancellationTokenSource();
await downloadOperation.StartAsync().AsTask(cancellationToken.Token, progress);

一切正常,但我注意到一种奇怪的行为。我更新正在进行的数据模型已更改通知和更新 UI 的方法。但是,当下载文件时,当大约 1MB 的文件在慢速互联网连接上下载时,会触发 progressChanged 事件,当我暂停下载并恢复下载时,它会每隔几 KB 触发一次该事件。我想知道有没有办法配置ProgressChanged事件的触发频率。我搜索了互联网,但一无所获。请帮忙。

如何使下载操作更频繁地调用进度更改事件

感谢您的反馈。我可以在我这边看到类似的行为。暂停并恢复下载操作后,将更频繁地调用progressChanged处理程序。但是,没有 API 可以控制调用进度回调的频率。每次 Windows 运行时方法报告进度通知时,都将调用构造函数Progress<DownloadOperation>处理程序。但这种实现是底层的,我们无法控制它。

如果您确实想要增加频率,一个丑陋的解决方法可能是在首次启动下载操作时暂停并恢复代码隐藏中的下载操作。例如,我们可以添加一个标志来标识首先开始的下载操作。

private bool firstStart = true;

然后在progressChanged处理程序中,暂停并恢复下载操作。

if (firstStart && currentProgress.Status == BackgroundTransferStatus.Running)
{
    download.Pause();
    await Task.Delay(100);
    download.Resume();
    firstStart = false;
}

这不是一个好的做法,我已经在内部报告了这个问题。一旦有任何进展,我会更新我的答案。