检查在后台任务中启动的下载操作的进度

Check progress of download operation which started in background task

我有一个应用程序,用户可以在其中下载一些文件,这些文件也可以通过推送通知触发的 BackgroundTask 下载。

当应用程序未 运行 并且我收到推送通知时,BackgroundTask 开始下载文件。如果我启动应用程序并且文件仍在下载,我希望看到它的进度。

我可以获取所有下载文件BackgroundDownloader.GetCurrentDownloadsAsync()

如果我有 DownloadOperation 的列表,我能以某种方式检查每个操作的当前进度吗?我的意思是,如果我可以将一些 IProgress<T> 方法附加到已经 运行 下载操作。

或者是否有任何其他方法可以检查在 BackgroundTask 中启动的 DownloadOperation 的进度?


更新

如果我需要查看下载文件的进度,我可以使用这种方法:

await downloadOperation.StartAsync().AsTask(token, new Progress<DownloadOperation>(...));

但是,如果我只有 DownloadOperation 的实例,它已经在下载文件,我如何检查操作进度并通知视图任何进度?有 Progress 属性 有当前进度,但没有任何 "progress changed event" 或类似的东西。

如果您已经有一个 DownloadOperation 在其他地方启动(在以前的应用程序 运行,后台任务中),那么您应该 Attach 到它。所以我认为,在获得下载列表后,您应该能够附加到它们,就像您开始的那样:

var downloads = await BackgroundDownloader.GetCurrentDownloadsAsync();

foreach(var operation in downloads)
    await operation.AttachAsync().AsTask(token, new Progress<DownloadOperation>(...)); // of course for each operation there will be some changes

处理 Progress<T> class 的 ProgressChanged 事件。

  var progress = new Progress<DownloadOperation>();
      progress.ProgressChanged += ProgressOnProgressChanged;

 private void ProgressOnProgressChanged(object sender, string s)
    {
      // your logic here
    }