Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# BackgroundDownloader.GetCurrentDownloadesAsync返回已完成的下载_C#_Windows Store Apps_Windows Phone 8.1 - Fatal编程技术网

C# BackgroundDownloader.GetCurrentDownloadesAsync返回已完成的下载

C# BackgroundDownloader.GetCurrentDownloadesAsync返回已完成的下载,c#,windows-store-apps,windows-phone-8.1,C#,Windows Store Apps,Windows Phone 8.1,在我的windows应用商店应用程序中,我使用BackgroundDownloader类处理多个后台下载。在我所有的3次下载都100%完成后,我关闭并打开应用程序,然后当我运行BackgroundDownloader.GetCurrentDownloadesAsync时,它会以100%完成状态返回所有下载 IReadOnlyList<DownloadOperation> readOnlyList = await BackgroundDownloader.GetCurrentDownl

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

IReadOnlyList<DownloadOperation> readOnlyList = await BackgroundDownloader.GetCurrentDownloadsAsync();
IReadOnlyList readOnlyList=wait BackgroundDownloader.getCurrentdownloadssync();
我的期望是完成下载将从列表中删除,或者我需要以某种方式强制删除它们。但是找不到它的任何功能

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


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

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

尝试:

private异步void Foo()
{
var downloads=await BackgroundDownloader.GetCurrentDownloadsAsync();
foreach(下载中的var下载)
{
var task=download.AttachAsync().AsTask();
var notAwait=task.ContinueWith(未完成);
}
}
未完成专用void(任务)
{
DownloadOperationDownload=任务结果;
// ...
}

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

尝试:

private异步void Foo()
{
var downloads=await BackgroundDownloader.GetCurrentDownloadsAsync();
foreach(下载中的var下载)
{
var task=download.AttachAsync().AsTask();
var notAwait=task.ContinueWith(未完成);
}
}
未完成专用void(任务)
{
DownloadOperation download=task.Result;
// ...
}

这是一种魅力。我相信这里会有大量的投票,因为谷歌搜索结果没有有效的答案。谢谢由于某种原因,此解决方案无法与我一起工作,在下载完成后,如果调用了对同一uri的另一个请求,即使我调用了AttachAsync,它也会抛出异常错误请求400。当我重新启动应用程序时,问题不存在。有什么想法吗?我想出来了,我在重复使用同一个BackgroundDownloader,我通过每次开始新的下载时实例化一个新的BackgroundDownloader实例来修复它。我不知道是否有其他方法可以解决我的问题,但这一种很有效。@Ahmed您可能正在
BackgroundDownloader
中设置标题,这两种下载都不需要。这很有效。我相信这里会有大量的投票,因为谷歌搜索结果没有有效的答案。谢谢由于某种原因,此解决方案无法与我一起工作,在下载完成后,如果调用了对同一uri的另一个请求,即使我调用了AttachAsync,它也会抛出异常错误请求400。当我重新启动应用程序时,问题不存在。有什么想法吗?我想出来了,我在重复使用同一个BackgroundDownloader,我通过每次开始新的下载时实例化一个新的BackgroundDownloader实例来修复它。我不知道是否有其他方法可以解决我的问题,但这一种很有效。@Ahmed您可能正在
BackgroundDownloader
中设置标题,这两种下载都不需要。
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;
    // ...
}