Автоматическая пауза / возобновление в фоновом режиме при загрузке Operation.Прогресс.Статус приостановленной сетевой работы

#windows-8 #windows-runtime #windows-store-apps #download

#windows-8 #windows-среда выполнения #windows-магазин-приложения #Скачать

Вопрос:

Как я могу использовать Windows.Сеть.Фоновая передача.Фоновый загрузчик для автоматической паузы / возобновления загрузки больших файлов при потере соединения с сетью?

Я пытаюсь загрузить большой файл с помощью 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);
  

Теперь, если я вручную отключу сетевой адаптер, у меня есть обработчик выполнения DownloadOperation со статусом PauseNoNetwork:
введите описание изображения здесь

И затем: введите описание изображения здесь

введите описание изображения здесь

Ответ №1:

Насколько я понимаю, API фоновой передачи автоматически устойчив к изменениям в подключении и приостанавливает операцию, если подключение потеряно, и автоматически возобновляет ее позже. Он также устойчив к перемещению между сетями, выбору модели с наилучшей стоимостью и так далее.

В вашем случае я подозреваю, что вы нажимаете тайм-аут, и поэтому обработчик выполнения сообщает и выдает ошибку по сравнению с паузой. Ключевым моментом здесь является сообщение об ошибке в обработчике выполнения; у вас также должен быть обработчик завершения, чтобы сообщить вам, когда операция в целом — а не просто прогресс — завершена или произошел сбой. То есть, если завершенный обработчик еще не был вызван, то операция все еще активна, даже если в ходе выполнения была получена ошибка, и фактически следует перезапустить.

Попробуйте проверить операцию загрузки.Свойство Progress (значение BackgroundDownloadProgress), чтобы увидеть, указывает ли это на возобновление.