Udostępnij przez


Tworzenie zadania w tle urządzenia w systemie Windows 8.1 (aplikacje urządzeń platformy UWP)

Ważne

Metadane urządzenia są przestarzałe i zostaną usunięte w przyszłej wersji systemu Windows. Aby uzyskać informacje o zastąpieniu tej funkcji, zobacz Driver Package Container Metadata (Metadane kontenera pakietów sterowników).

Aplikacja platformy UWP może synchronizować dane na urządzeniu peryferyjnym. Jeśli aplikacja jest skojarzona z metadanymi urządzenia, aplikacja urządzenia platformy UWP może również wykonywać aktualizacje urządzeń, takie jak aktualizacje oprogramowania układowego. W tym artykule opisano sposób tworzenia zadania w tle urządzenia, które używa elementu DeviceUseTrigger lub DeviceServicingTrigger. Agenci w tle urządzeń korzystający z tych wyzwalaczy podlegają zasadom, które zapewniają zgodę użytkownika i pomagają zachować żywotność baterii podczas synchronizowania i aktualizowania urządzeń. Aby uzyskać więcej informacji na temat zadań w tle urządzeń, zobacz Synchronizacja urządzeń i aktualizacja aplikacji urządzeń platformy UWP.

Ten artykuł odpowiada przykładowi niestandardowego urządzenia USB. Przykład niestandardowego urządzenia USB przedstawia zadanie w tle, które wykonuje synchronizację urządzenia z urządzeniem DeviceUseTrigger.

Mimo że zadanie w tle urządzenia w przykładowym niestandardowym urządzeniu USB zawiera element DeviceUseTrigger, wszystkie elementy omówione w tym artykule można również zastosować do zadań w tle urządzeń korzystających z elementu DeviceServicingTrigger. Jedyną różnicą między używaniem dwóch wyzwalaczy są kontrole zasad wykonywane przez system Windows.

Manifest aplikacji

Aby użyć zadania w tle urządzenia, aplikacja musi zadeklarować ją w pliku manifestu aplikacji pierwszego planu, podobnie jak w przypadku zadań w tle wyzwalanych przez system. Aby uzyskać więcej informacji, zobacz Device sync and update for UWP device apps (Synchronizacja i aktualizacja urządzeń platformy UWP).

W tym przykładzie z pliku manifestu pakietu aplikacji, DeviceLibrary.SyncContent jest punktem wejścia z aplikacji działającej na pierwszym planie. DeviceLibrary.SyncContent to punkt wejścia zadania w tle, które używa DeviceUseTrigger.

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

Zadanie w tle urządzenia

Klasa zadań w tle urządzenia implementuje IBackgroundTask interfejs i zawiera rzeczywisty kod tworzony w celu synchronizacji lub zaktualizowania urządzenia peryferyjnego. Klasa zadań w tle jest wykonywana, gdy zadanie w tle zostaje wyzwolone i z punktu wejścia podanego w manifeście aplikacji.

Klasa tła urządzenia w przykładowym niestandardowym urządzeniu USB zawiera kod umożliwiający przeprowadzenie synchronizacji z urządzeniem USB przy użyciu zadania w tle DeviceUseTrigger . Aby uzyskać szczegółowe informacje, pobierz przykład. Aby uzyskać więcej informacji na temat implementowania IBackgroundTask i infrastruktury zadań w tle systemu Windows, zobacz Obsługa aplikacji z zadaniami w tle.

Kluczowe części zadania w tle urządzenia w przykładzie niestandardowego urządzenia USB obejmują:

  1. Klasa IoSyncBackgroundTask implementuje IBackgroundTask interfejs wymagany przez infrastrukturę zadań w tle systemu Windows.

  2. Klasa IoSyncBackgroundTask uzyskuje przekazaną do niej instancję DeviceUseDetails w metodzie Run klasy IoSyncBackgroundTask i używa jej do zgłaszania postępu do aplikacji Microsoft Store oraz do rejestrowania się na zdarzenia anulowania.

  3. Metoda Run klasy IoSyncBackgroundTask wywołuje również prywatne metody OpenDevice i WriteToDeviceAsync, które implementują kod synchronizacji urządzenia w tle.

Aplikacja pierwszego planu

Aplikacja pierwszego planu w przykładzie niestandardowego urządzenia USB rejestruje i wyzwala w tle zadanie urządzenia wykorzystujące DeviceUseTrigger. Ta sekcja zawiera omówienie kroków, które należy wykonać w aplikacji pierwszego planu w celu zarejestrowania, wyzwolenia i obsługi postępu zadania działającego w tle w urządzeniu.

Aplikacja pierwszego planu w przykładzie niestandardowego urządzenia USB wykonuje następujące kroki, aby użyć zadania w tle urządzenia:

  1. Tworzy nowe obiekty DeviceUseTrigger i BackgroundTaskRegistration.

  2. Sprawdza, czy jakiekolwiek zadania w tle zostały wcześniej zarejestrowane przez tę aplikację i anuluje je, wywołując metodę BackgroundTaskRegistration.Unregister w zadaniu.

  3. Metoda prywatna SetupBackgroundTask rejestruje zadanie w tle, które zostanie zsynchronizowane z urządzeniem. Metoda SetupBackgroundTask jest wywoływana z metody SyncWithDeviceAsync w następnym kroku.

    1. Inicjuje element DeviceUseTrigger i zapisuje go do późniejszego użycia.

    2. Tworzy nowy BackgroundTaskBuilder obiekt i używa jego właściwości Name i TaskEntryPoint oraz właściwości i metody SetTrigger do zarejestrowania obiektu aplikacji DeviceUseTrigger i nazwy zadania w tle. Właściwość BackgroundTaskBuilder obiektu TaskEntryPoint jest ustawiona na pełną nazwę klasy zadań w tle, która będzie uruchamiana po wyzwoleniu zadania w tle.

    3. Rejestruje zdarzenia dotyczące ukończenia i postępu z zadania w tle, aby aplikacja pierwszego planu mogła informować użytkownika o ukończeniu i postępach.

  4. Metoda prywatna SyncWithDeviceAsync rejestruje zadanie w tle, które będzie synchronizowane z urządzeniem i uruchamia synchronizację w tle.

    1. Wywołuje metodę SetupBackgroundTask z poprzedniego kroku i rejestruje zadanie w tle, które zostanie zsynchronizowane z urządzeniem.

    2. Wywołuje metodę prywatną StartSyncBackgroundTaskAsync , która uruchamia zadanie w tle. Ta metoda zamyka dojście aplikacji do urządzenia, aby upewnić się, że zadanie w tle jest w stanie otworzyć urządzenie po uruchomieniu.

      Ważne

      Zadanie w tle będzie musiało otworzyć urządzenie, aby przeprowadzić aktualizację, więc aplikacja pierwszego planu powinna zamknąć swoje połączenia z urządzeniem przed wywołaniem RequestAsync.

    Następnie metoda StartSyncBackgroundTaskAsync wywołuje metodę DeviceUseTrigger obiektu RequestAsync, która uruchamia zadanie w tle i zwraca obiekt DeviceTriggerResults z RequestAsync używany do określenia, czy zadanie w tle zostało uruchomione pomyślnie.

    Ważne

    System Windows sprawdza, czy wszystkie niezbędne kontrole zasad inicjowania zadań zostały ukończone. Jeśli wszystkie kontrole zasad zostaną ukończone, operacja aktualizacji jest teraz uruchomiona jako zadanie w tle poza aplikacją pierwszego planu, co umożliwia bezpieczne wstrzymanie aplikacji podczas wykonywania operacji. System Windows wymusi również wszelkie wymagania dotyczące środowiska uruchomieniowego i anuluje zadanie w tle, jeśli te wymagania nie zostaną już spełnione.

  5. Na koniec metoda SyncWithDeviceAsync używa obiektu zwróconego z DeviceTriggerResults, aby określić, czy zadanie w tle rozpoczęło się pomyślnie. Instrukcja switch służy do sprawdzania wyniku z DeviceTriggerResults

  6. Aplikacja pierwszego planu implementuje prywatną OnSyncWithDeviceProgress procedurę obsługi zdarzeń, która zaktualizuje interfejs użytkownika aplikacji na podstawie postępu zadania uruchomionego w tle urządzenia.

  7. Aplikacja pierwszego planu implementuje prywatny OnSyncWithDeviceCompleted program obsługi zdarzeń, aby zarządzać przejściem z zadań działających w tle do aplikacji pierwszego planu, gdy zadanie w tle zostanie zakończone.

    1. Używa metody CheckResults obiektu BackgroundTaskCompletedEventArgs do określenia, czy zadanie w tle zgłosiło jakiekolwiek wyjątki.

    2. Aplikacja pierwszego planu ponownie otwiera urządzenie do użytku przez aplikację, gdy zadanie w tle zostało ukończone i aktualizuje interfejs użytkownika w celu powiadomienia użytkownika.

  8. Aplikacja pierwszego planu implementuje prywatne procedury obsługi zdarzeń przy kliknięciu przycisku z interfejsu użytkownika, aby uruchomić i anulować zadanie w tle.

    1. Prywatny program obsługi zdarzeń Sync_Click wywołuje metodę SyncWithDeviceAsync opisaną w poprzednich krokach.

    2. Prywatny CancelSync_Click program obsługi zdarzeń wywołuje prywatną metodę CancelSyncWithDevice, aby anulować zadanie w tle.

  9. Metoda prywatna CancelSyncWithDevice wyrejestruje i anuluje wszystkie aktywne synchronizacje urządzeń, aby można było ponownie otworzyć urządzenie przy użyciu metody BackgroundTaskRegistration.Unregister .