检查在后台任务

时间:2016-01-14 17:21:50

标签: c# windows-10 uwp windows-10-mobile windows-10-universal

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

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

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

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

或者,有没有其他方法可以检查在BackgroundTask中开始的DownloadOperation的进度?

更新

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

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

但是,如果我只有DownloadOperation的实例已经下载了文件,我该如何检查操作的进度并通知视图有关进度的信息? Progress属性有当前进度,但没有任何&#34;进展已更改事件&#34;或类似的东西。

2 个答案:

答案 0 :(得分:0)

如果您已经在其他位置启动了 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

答案 1 :(得分:0)

处理ProgressChanged课程的Progress<T>事件。

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

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