【问题标题】:BackgroundDownloader.GetCurrentDownloadsAsync returns completed downloadsBackgroundDownloader.GetCurrentDownloadsAsync 返回完成的下载
【发布时间】:2015-01-12 14:14:20
【问题描述】:

在我的 Windows 商店应用程序中,我使用 BackgroundDownloader 类来处理多个后台下载。在我的 3 次下载都 100% 完成后,我关闭并打开应用程序,然后当我运行 BackgroundDownloader.GetCurrentDownloadsAsync 时,它会返回所有 100% 完成状态的下载。

IReadOnlyList<DownloadOperation> readOnlyList = await BackgroundDownloader.GetCurrentDownloadsAsync();

我期望完成的下载将从列表中删除,或者我需要以某种方式强制删除它们。但找不到任何功能。

如何从 CurrentDownloads 列表中删除已完成的下载?

-附带问题:GetCurrentDownloadsAsync 函数会返回所有活动下载(包括其他应用程序下载)还是仅在我的应用程序中执行下载?

【问题讨论】:

    标签: c# windows-store-apps windows-phone-8.1


    【解决方案1】:

    您必须通过对刚刚完成的下载执行AttachAsync() 来执行完成处理程序。之后,下载将不再出现在GetCurrentDownloadsAsync()的结果中。

    试试:

    private async void Foo()
    {
        var downloads = await BackgroundDownloader.GetCurrentDownloadsAsync();
        foreach (var download in downloads)
        {
            var task = download.AttachAsync().AsTask();
            var notAwait = task.ContinueWith(OnCompleted);
        }
    }
    
    private void OnCompleted(Task<DownloadOperation> task)
    {
        DownloadOperation download = task.Result;
        // ...
    }
    

    【讨论】:

    • 这就像一个魅力。我相信很多赞成票会在这里下雨,因为谷歌结果没有有效的答案。谢谢!
    • 由于某种原因,此解决方案不适用于我,下载完成后,如果调用了对同一 uri 的另一个请求,即使我调用了 AttachAsync,它也会抛出异常错误请求 400。当我重新启动应用程序时,问题不存在。有什么想法吗?
    • 我想通了,我正在重用相同的 BackgroundDownloader,我通过在每次开始新下载时实例化一个新的 BackgroundDownloader 实例来修复它。我不知道是否有其他方法可以解决我的问题,但这个方法有效。
    • @Ahmed 您可能在BackgroundDownloader 中设置了两个下载都不需要的标题。
    猜你喜欢
    • 1970-01-01
    • 2012-08-14
    • 2020-04-24
    • 2016-12-02
    • 1970-01-01
    • 2020-06-20
    • 1970-01-01
    • 2017-12-17
    • 1970-01-01
    相关资源
    最近更新 更多