如果DownloadOperation.Progress.Status PausedNoNetwork,则在backgrounddownloader中自动暂停/恢复

时间:2014-07-02 07:16:58

标签: windows-8 windows-runtime windows-store-apps download

如果丢失了与网络的连接,如何使用Windows.Networking.BackgroundTransfer.BackgroundDownloader自动暂停/恢复下载大文件?

我正在尝试使用Windows BackgroundDownloader下载大文件:

var userFolder = await GetUserFolder();
var file = await userFolder.CreateFileAsync("BigFile.iso", CreationCollisionOption.GenerateUniqueName);

var backgroundDownloader = new BackgroundDownloader();
_downloadOperation = backgroundDownloader.CreateDownload(new Uri("http://mirrors.melbourne.co.uk/ubuntu-releases//raring/ubuntu-13.04-desktop-amd64.iso"), file);

var progress = new Progress<DownloadOperation>(operation =>
                {
                    //...Error operation.Progress status if lost connection
                });                

await _downloadOperation.StartAsync().AsTask(new CancellationToken(), progress);

现在,如果我手动关闭网络适配器,我有状态为PauseNoNetwork的DownloadOperation in Progress处理程序: enter image description here

然后: enter image description here

enter image description here

1 个答案:

答案 0 :(得分:0)

据我所知,后台传输API可自动恢复连接的变化,并在连接丢失时暂停操作,并在以后自动恢复。它还能够适应网络之间的漫游,选择具有最佳成本模型的网络,等等。

在您的情况下,我怀疑您正在达到超时,因此进度处理程序会报告错误而不是暂停。这里的关键是在 Progress 处理程序中报告错误;你还应该有一个 Completed 处理程序来告诉你整个操作 - 而不仅仅是进度 - 何时完成或失败。也就是说,如果尚未调用Completed处理程序,那么即使Progress遇到错误,该操作仍然处于活动状态,并且实际上应该重新启动。

尝试检查DownloadOperation.Progress属性(BackgroundDownloadProgress值)以查看是否指示HasRestarted。