Отслеживание хода выполнения и завершения фоновых задач (HTML)
[ Эта статья адресована разработчикам приложений среды выполнения Windows для Windows 8.x и Windows Phone 8.x. При разработке приложений для Windows 10 см. раздел последняя документация]
Узнайте, как ваше приложение распознает события выполнения и завершения, сообщаемые фоновой задачей. Фоновые задачи не связаны с приложением и выполняются отдельно, но код приложения может наблюдать за выполнением и завершением фоновых задач. Для этого приложение подписывается на события фоновых задач, которые оно зарегистрировало в системе.
Что необходимо знать
Технологии
Необходимые условия
- В этом разделе предполагается, что у вас есть приложение, которое зарегистрировало фоновые задачи. Чтобы быстро создать фоновую задачу, см. Краткое руководство: создание и регистрация фоновой задачи. Дополнительные сведения об условиях и триггерах: Поддержка приложения с помощью фоновых задач.
Инструкции
Этап 1:
Создайте функцию, которая будет подключена к обработчику событий для завершения фоновой задачи. Данная функция должна принимать объект BackgroundTaskCompletedEventArgs и другие параметры.
Если вы регистрируете функцию локально, то можно использовать следующее занимаемое место:
function OnCompleted(args) { // TODO: Add code that deals with background task completion. }
Потом можно зарегистрировать эту функцию как объект BackgroundTaskRegistration (полученный посредством успешного вызова функции "Регистрация" (Register)):
backgroundTaskRegistration.addEventListener("completed", onCompleted);
Также вам потребуется добавить свой код, который работает с завершением фоновой задачи.
Например, в образце фоновой задачи обновляется пользовательский интерфейс с помощью состояния завершения, сохраненного в LocalSettings:
function OnCompleted(args) { // // // backgroundTaskName = this.name; // // Call a method to update the UI (beyond the scope of this example). // UpdateUI(); }
Надежное приложение может проверять исключения, вызываемые фоновой задачей, с помощью вызова 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:
Создайте функцию обработчика событий для обработки завершенных фоновых задач. Этот код должен использовать отдельный объем памяти, которая принимает объект IBackgroundTaskRegistration и объект BackgroundTaskProgressEventArgs:
Используйте следующий объем памяти для метода OnProgress обработчика событий фоновой задачи:
function OnProgress(task, args) { // TODO: Add code that deals with background task progress. }
Добавьте в обработчик событий код, обрабатывающий завершение фоновой задачи.
Например, в образце фоновой задачи пользовательский интерфейс обновляется с помощью состояния выполнения, передаваемого через параметр args:
function OnProgress(task, args) { var progress = "Progress: " + args.Progress + "%"; BackgroundTaskSample.SampleBackgroundTaskProgress = progress; UpdateUI(); }
Этап 3:
Регистрируйте функции обработчика событий в новых и существующих фоновых задачах.
Когда приложение регистрирует фоновую задачу впервые, оно должно выполнить регистрацию, чтобы получить обновления выполнения и завершения для задачи, в случае если задача выполняется в то время, когда приложение еще работает на переднем плане.
Например, в образце фоновой задачи для каждой регистрируемой фоновой задачи вызывается следующая функция:
function AttachProgressAndCompletedHandlers(IBackgroundTaskRegistration task) { task.Progress += new BackgroundTaskProgressEventHandler(OnProgress); task.Completed += new BackgroundTaskCompletedEventHandler(OnCompleted); }
Когда приложение запускается или переходит на новую страницу, где состояние фоновой задачи имеет значение, оно должно получить список зарегистрированных в настоящее время фоновых задач и сопоставить их с функциями обработчика событий выполнения и завершения. Список фоновых задач, зарегистрированных приложением в настоящее время, хранится в свойстве 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(); }
Связанные разделы
Краткое руководство: создание и регистрация фоновой задачи
Поддержка приложения с помощью фоновых задач
Обработка отмененной фоновой задачи
Получение списка отложенных фоновых задач