检查在后台任务中启动的下载操作的进度
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
}
我有一个应用程序,用户可以在其中下载一些文件,这些文件也可以通过推送通知触发的 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
}