Создание фоновой задачи устройства в Windows 8.1 (приложения устройств UWP)

Это важно

Метаданные устройства являются устаревшими и будут удалены в будущем выпуске Windows. Сведения о замене этой функции см. в разделе Метаданные контейнера пакетов драйверов.

Приложение UWP может синхронизировать данные на периферийном устройстве. Если приложение связано с метаданными устройства, это приложение устройства UWP также может выполнять обновления устройств, например обновления встроенного ПО. В этой статье описывается, как создать фоновую задачу устройства, которая использует DeviceUseTrigger или DeviceServicingTrigger. Фоновые агенты устройства, которые используют эти триггеры, подчиняются политике, обеспечивающей получение согласия пользователя и помогающей продлить срок службы батареи в процессе синхронизации и обновления устройств. Дополнительные сведения о фоновых задачах устройства см. в разделе "Синхронизация устройств и обновление" для приложений устройств UWP.

Эта статья соответствует примеру пользовательского USB-устройства. В примере пользовательского USB-устройства показана фоновая задача, которая выполняет синхронизацию устройства с DeviceUseTrigger.

Хотя фоновая задача устройства в примере пользовательского USB-устройства включает DeviceUseTrigger, все, что описано в этой статье, также можно применить к фоновым задачам устройства, используюющим DeviceServicingTrigger. Единственное различие между использованием двух триггеров — это проверки политики, сделанные Windows.

Манифест приложения

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

В этом примере из файла манифеста пакета приложения DeviceLibrary.SyncContent является точкой входа для приложения переднего плана. DeviceLibrary.SyncContent — это точка входа для фоновой задачи, которая использует DeviceUseTrigger.

<Extensions>
  <Extension Category="windows.backgroundTasks" EntryPoint="DeviceLibrary.SyncContent">
    <BackgroundTasks>
      <m2:Task Type="deviceUse" /> 
    </BackgroundTasks>
  </Extension>
</Extensions>

Фоновая задача устройства

Класс фоновой задачи устройства реализует интерфейс IBackgroundTask и содержит код, который вы создаете для синхронизации или обновления периферийного устройства. Класс фоновой задачи выполняется при активации фоновой задачи и из точки входа, предоставленной в манифесте приложения.

Фоновый класс устройства в примере пользовательского USB-устройства содержит код для синхронизации с USB-устройством с помощью фоновой задачи DeviceUseTrigger . Для получения полных сведений скачайте пример. Дополнительные сведения о реализации IBackgroundTask и фоновой инфраструктуре задач Windows см. в статье "Поддержка приложения с фоновыми задачами".

Ключевые части фоновой задачи устройства в примере пользовательского USB-устройства :

  1. Класс IoSyncBackgroundTask реализует интерфейс, необходимый для инфраструктуры фоновых задач Windows.

  2. Класс IoSyncBackgroundTask получает экземпляр DeviceUseDetails, переданный этому классу методом Run класса IoSyncBackgroundTask, и использует этот экземпляр для отправки отчета о ходе выполнения в приложение Microsoft Store и регистрации на события отмены.

  3. Метод IoSyncBackgroundTask Run класса также вызывает частные OpenDevice и WriteToDeviceAsync методы, реализующие код синхронизации фоновых устройств.

Приложение переднего плана

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

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

  1. Создает новые объекты DeviceUseTrigger и BackgroundTaskRegistration.

  2. Проверяет, были ли фоновые задачи ранее зарегистрированы этим приложением и отменяют их, вызвав метод BackgroundTaskRegistration.Unregister для задачи.

  3. SetupBackgroundTask Частный метод регистрирует фоновую задачу, которая будет синхронизироваться с устройством. Метод SetupBackgroundTask вызывается из SyncWithDeviceAsync метода на следующем шаге.

    1. Инициализирует DeviceUseTrigger и сохраняет его для последующего использования.

    2. Создает новый объект BackgroundTaskBuilder и использует его свойства и метод Name, TaskEntryPoint и SetTrigger для регистрации объекта DeviceUseTrigger, принадлежащего приложению, и имени фоновой задачи. Свойство BackgroundTaskBuilder объекта TaskEntryPoint имеет полное имя фонового класса задач, который будет выполняться при активации фоновой задачи.

    3. Регистрирует события завершения и прогресса фоновой задачи, чтобы приложение переднего плана могло предоставлять пользователю информацию о завершении и ходе выполнения.

  4. SyncWithDeviceAsync Частный метод регистрирует фоновую задачу, которая будет синхронизироваться с устройством и запускает фоновую синхронизацию.

    1. SetupBackgroundTask Вызывает метод из предыдущего шага и регистрирует фоновую задачу, которая будет синхронизироваться с устройством.

    2. Вызывает закрытый StartSyncBackgroundTaskAsync метод, который запускает фоновую задачу. Метод закрывает дескриптор доступа приложения к устройству, обеспечивая возможность фоновой задаче открыть устройство при запуске.

      Это важно

      Фоновая задача должна открыть устройство для обновления, поэтому приложение переднего плана должно закрыть свои подключения к устройству перед вызовом RequestAsync.

    Затем метод StartSyncBackgroundTaskAsync вызывает метод DeviceUseTrigger объекта RequestAsync, который запускает фоновую задачу и возвращает объект DeviceTriggerResults из RequestAsync, используемый для определения успешного запуска фоновой задачи.

    Это важно

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

  5. Наконец, метод SyncWithDeviceAsync использует объект DeviceTriggerResults , возвращенный из StartSyncBackgroundTaskAsync, чтобы определить, успешно ли запущена фоновая задача. Оператор switch используется для оценки результата из DeviceTriggerResults

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

  7. Приложение переднего плана реализует частный OnSyncWithDeviceCompleted обработчик событий для обработки перехода от фоновых задач к приложению переднего плана при завершении фоновой задачи.

    1. Метод CheckResults объекта BackgroundTaskCompletedEventArgs используется, чтобы определить, были ли выброшены какие-либо исключения в ходе выполнения фоновой задачи.

    2. Приложение переднего плана повторно открывает устройство для использования приложением теперь, когда фоновая задача завершена и обновляет пользовательский интерфейс, чтобы уведомить пользователя.

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

    1. Обработчик частных Sync_Click событий вызывает метод, описанный SyncWithDeviceAsync в предыдущих шагах.

    2. Обработчик частных CancelSync_Click событий вызывает частный CancelSyncWithDevice метод для отмены фоновой задачи.

  9. Частный CancelSyncWithDevice метод отменяет регистрацию и отменяет все активные синхронизации устройств, чтобы устройство можно было повторно открыть с помощью метода BackgroundTaskRegistration.Unregister .