locked
Обнуляется DownloadProgress после перезагрузки приложения в Windows8 RRS feed

  • Общие обсуждения

  • В приложении для Windows 8 я использую BackgroundDownloader для загрузки файлов. После рестарта приложения я восстанавливаю текущие загрузки:

    public async override Task RestoreDownloads()
        {
            IReadOnlyList<DownloadOperation> downloads = null;
            try
            {
                downloads = await BackgroundDownloader.GetCurrentDownloadsAsync();
            }
            catch (Exception ex)
            {
                return;
            }
    
            if (downloads.Count > 0)
            {
                List<Task> tasks = new List<Task>();
                foreach (var download in downloads)
                {
                        cancellationToken = new CancellationTokenSource();
                        tasks.Add(HandleDownloadAsync(download, cancellationToken, false));
                }
                await Task.WhenAll(tasks);
            }
        }
    
    
        private async Task HandleDownloadAsync(CancellationTokenSource cancellationTokenSource, FavoritePageViewModel favorite, bool start)
        {
            try
            {
                var progressCallback = new Progress<DownloadOperation>(x =>
                {
                    if (download.Progress.TotalBytesToReceive > 0)
                    {
                        var progress = download.Progress.BytesReceived * 100.0 / download.Progress.TotalBytesToReceive;
                    }
    
                });
    
                if (start)
                {
                    await download.StartAsync().AsTask(cancellationTokenSource.Token, progressCallback);
                }
                else
                {
                    await download.AttachAsync().AsTask(cancellationTokenSource.Token, progressCallback);
                }
            }
            catch ()
            {
            }
        }
    Когда приложение выполняется в Windows 8 в каждой загрузке обнуляется DownloadProgress.BytesReceived после AttachAsync и загрузка начинается сначала. В Windows 8.1 такого не происходит, загрузки продолжаются. Это нормально?


    4 июля 2014 г. 4:19

Все ответы

  • Нет, не нормально. Должно восстанавливать и вин8.0.
    4 июля 2014 г. 6:05
  • А в чем может быть дело? тот же самый код на Win8.1 работает без проблем
    4 июля 2014 г. 6:40
  • Начнем с самого банального, из-за чего у меня такое, как у Вас возникло - апдейты на винде есть неустановленные?

    По коду, постараюсь вечером в своем проекте посмотреть, у меня на вин8 работало.

    Разве что могу посоветовать когда создаете загрузки добавить имя группы и, соответственно, восстановление делать тоже с этим именем.
    • Изменено Oleg Kurzov 4 июля 2014 г. 7:54
    4 июля 2014 г. 7:53
  • Кажется уже разобрался в чем дело, спасибо
    4 июля 2014 г. 9:20
  • Кажется уже разобрался в чем дело, спасибо
    Так поделитесь с сообществом. Возможно, кому-то это пригодится.
    4 июля 2014 г. 9:53
  • Да я поторопился сказать, что разобрался и делиться пока нечем. Думал дело в апдейтах, но потом оказалось что нет. 

    Вобщем опытным путем было выяснено, что прогресс загрузки сбрасывается если закрыть приложение и сразу же его открыть по новой. Если после закрытия подождать секунд 10,  то при открытии прогресс возобновляется

    4 июля 2014 г. 14:28
  • За 10 сек после закрытия происходит переход приложения в состояние Suspended. Оно в это время сохраняет данные о приложении.
    4 июля 2014 г. 14:59
  • Т.е. пока состояние приложения не перейдет в Suspended, текущее состояние загрузки не запомнится?
    7 июля 2014 г. 6:38
  • Т.е. пока состояние приложения не перейдет в Suspended, текущее состояние загрузки не запомнится?

    Точно. Но мне кажется что загрузка длится немного дольше, хотя может это всплывающие уведомления с сообщением об окончании загрузки опаздывают.

    Во время отладки у меня встречался баг похожи на ваш. Что бы его избежать нужно закрывать приложение и только потом выключать отладку. Если так не сделать, то возможна свистопляска с прогрессом скачивания (какие-то другие значения будет показывать), может быть установлен непонятный статус скачивания (например, пауза из за отсутствия подключения к сети, хотя с подключением все нормально) и не исключены потери загрузок, т.е. вы их не сможете восстановить. В случае  непонятной работы закачек нужно удалить приложение вручную и только потом запускать в режиме отладки. Ну и советую внимательнее почитать описания классов, там отдельно про отладку написано.

    7 июля 2014 г. 7:03
  • Да, у меня тоже было такое, когда "стоп" нажимал и терял закачку. И всё было ок, когда нормально закрывал приложение.
    7 июля 2014 г. 7:51
  • Не помогает. Закрываю приложение, потом прекращаю отладку. После перезапуска загрузка начинается сначала
    7 июля 2014 г. 11:21
  • Не помогает. Закрываю приложение, потом прекращаю отладку. После перезапуска загрузка начинается сначала
    Предварительно удаляли приложение?
    7 июля 2014 г. 14:23
  • Нет. Сейчас удалил, запустил по новой, пока вроде полет нормальный
    7 июля 2014 г. 15:11
  • Нет, опять все по новой. Такое же поведение повторяется если теряется связь с интернетом, после появления сети, загрузка не продолжается, а начинается заново. И опять же в Win8.1 такого не происходит
    8 июля 2014 г. 7:55