在后台下载文件时,我无法获得活动下载的列表.UWP



在后台下载文件时,我无法获得活动下载的列表。ActiveDownloads=系统_COM对象。我做错了什么?

List<DownloadOperation> activeDownloads = new List<DownloadOperation>();
IReadOnlyList<DownloadOperation> downloads = null;
try
{
downloads = await BackgroundDownloader.GetCurrentDownloadsAsync();
if (downloads?.Count > 0)
{
foreach (DownloadOperation download in downloads)
{
activeDownloads.Add(download);
}
}
} 

尝试使用BackgroundTransferGroup并获得相同的结果

IEnumerable<DownloadOperation> activeDownloads = BackgroundDownloader.GetCurrentDownloadsForTransferGroupAsync(backgroundTransferCompletionGroup).GetAwaiter().GetResult();

我试过你的代码,你可能会在调试时感到困惑,Visual Studio显示downloads类型不是IReadOnlyList<DownloadOperation>,而是System._ComObject

这是因为BackgroundDownloader.GetCurrentDownloadsAsync是通过COM接口获得的数据,所以Visual Studio将显示为System._ComObject,这只是一种临时状态。

调试时,如果展开downloads,就会看到m_ObjectToDataMap = null,这也是Visual Studio基于当前上下文推断的结果。通常,我们在开发时不需要考虑System._ComObject的类型,应用程序在获得数据后会将其转换为IReadOnlyList<DownloadOperation>类型。

BackgroundDownloader.GetCurrentDownloadsAsync()返回的结果为null,表示当前没有与后台传输组关联的挂起下载集合。

这里有两点需要注意。

第一个是下载挂起。这意味着您已经创建了DownloadOpeartion并下载了它,但在完成之前就终止了(例如关闭应用程序(。下次启动应用程序时,可以通过GetCurrentDownloadsAsync方法获得最后一个未完成的下载列表。但是,如果在应用程序启动时在同一地址运行下载,它将替换最后一次未完成的下载,因为BackgroundDownloader不支持同时下载相同的Uri。

二是您获取的下载列表不在特定的组中,否则无法通过GetCurrentDownloadsAsync方法获取。

最新更新