Поделиться через


Отслеживание хода выполнения и завершения фоновых задач (HTML)

[ Эта статья адресована разработчикам приложений среды выполнения Windows для Windows 8.x и Windows Phone 8.x. При разработке приложений для Windows 10 см. раздел последняя документация]

Узнайте, как ваше приложение распознает события выполнения и завершения, сообщаемые фоновой задачей. Фоновые задачи не связаны с приложением и выполняются отдельно, но код приложения может наблюдать за выполнением и завершением фоновых задач. Для этого приложение подписывается на события фоновых задач, которые оно зарегистрировало в системе.

Что необходимо знать

Технологии

Необходимые условия

Инструкции

Этап 1:

  1. Создайте функцию, которая будет подключена к обработчику событий для завершения фоновой задачи. Данная функция должна принимать объект BackgroundTaskCompletedEventArgs и другие параметры.

    Если вы регистрируете функцию локально, то можно использовать следующее занимаемое место:

    function OnCompleted(args)
    {
        // TODO: Add code that deals with background task completion.
    }
    

    Потом можно зарегистрировать эту функцию как объект BackgroundTaskRegistration (полученный посредством успешного вызова функции "Регистрация" (Register)):

    backgroundTaskRegistration.addEventListener("completed", onCompleted);
    
  2. Также вам потребуется добавить свой код, который работает с завершением фоновой задачи.

    Например, в образце фоновой задачи обновляется пользовательский интерфейс с помощью состояния завершения, сохраненного в LocalSettings:

    function OnCompleted(args)
    {
        // 
        // 
        // 
        backgroundTaskName = this.name;
    
        // 
        // Call a method to update the UI (beyond the scope of this example).
        // 
        UpdateUI();
    }
    
  3. Надежное приложение может проверять исключения, вызываемые фоновой задачей, с помощью вызова CheckResult.

    Чтобы обрабатывать исключения, вызываемые фоновой задачей, метод образца фоновой задачи можно изменить следующим образом:

    function OnCompleted(task, args)
    {
        var settings = ApplicationData.Current.LocalSettings;
        var key = task.TaskId.ToString();
    
        try
        {
            args.CheckResult();
            BackgroundTaskSample.SampleBackgroundTaskStatus = settings.Values[key].ToString();
        }
        catch (Exception ex)
        {
            BackgroundTaskSample.SampleBackgroundTaskStatus = "Error: " + ex.Message;
        }
    
        UpdateUI();
    }
    

Этап 2:

  1. Создайте функцию обработчика событий для обработки завершенных фоновых задач. Этот код должен использовать отдельный объем памяти, которая принимает объект IBackgroundTaskRegistration и объект BackgroundTaskProgressEventArgs:

    Используйте следующий объем памяти для метода OnProgress обработчика событий фоновой задачи:

    function OnProgress(task, args)
    {
        // TODO: Add code that deals with background task progress.
    }
    
  2. Добавьте в обработчик событий код, обрабатывающий завершение фоновой задачи.

    Например, в образце фоновой задачи пользовательский интерфейс обновляется с помощью состояния выполнения, передаваемого через параметр args:

    function OnProgress(task, args)
    {
        var progress = "Progress: " + args.Progress + "%";
        BackgroundTaskSample.SampleBackgroundTaskProgress = progress;
        UpdateUI();
    }
    

Этап 3:

Регистрируйте функции обработчика событий в новых и существующих фоновых задачах.

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

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

    
    function AttachProgressAndCompletedHandlers(IBackgroundTaskRegistration task)
    {
        task.Progress += new BackgroundTaskProgressEventHandler(OnProgress);
        task.Completed += new BackgroundTaskCompletedEventHandler(OnCompleted);
    }
    
  2. Когда приложение запускается или переходит на новую страницу, где состояние фоновой задачи имеет значение, оно должно получить список зарегистрированных в настоящее время фоновых задач и сопоставить их с функциями обработчика событий выполнения и завершения. Список фоновых задач, зарегистрированных приложением в настоящее время, хранится в свойстве BackgroundTaskRegistration.AllTasks.

    Например, чтобы подключить обработчики событий при выполнении перехода на страницу SampleBackgroundTask, в образце фоновой задачи используется следующий код:

    
    function OnNavigatedTo(NavigationEventArgs e)
    {
        foreach (var task in BackgroundTaskRegistration.AllTasks)
        {
            if (task.Value.Name == BackgroundTaskSample.SampleBackgroundTaskName)
            {
                AttachProgressAndCompletedHandlers(task.Value);
                BackgroundTaskSample.UpdateBackgroundTaskStatus(BackgroundTaskSample.SampleBackgroundTaskName, true);
            }
        }
    
        UpdateUI();
    }
    

Связанные разделы

Краткое руководство: создание и регистрация фоновой задачи

Отладка фоновой задачи

Поддержка приложения с помощью фоновых задач

Обработка отмененной фоновой задачи

Получение списка отложенных фоновых задач

Объявление фоновых задач в манифесте приложения

Руководство и контрольный список для фоновых задач