Udostępnij przez


Tworzenie i rejestrowanie zadania w tle wewnątrz procesu

ważne interfejsy API

W tym temacie pokazano, jak utworzyć i zarejestrować zadanie w tle uruchamiane w tym samym procesie co aplikacja.

Zadania wewnątrzprocesowe w tle są prostsze do zaimplementowania niż zadania poza procesem. Są one jednak mniej odporne. Jeśli kod uruchomiony w ramach zadania w tle w procesie ulegnie awarii, spowoduje to usunięcie aplikacji. Należy również pamiętać, że DeviceUseTrigger, DeviceServicingTrigger i IoTStartupTask nie można używać z modelem w procesie. Aktywowanie zadania w tle VoIP w aplikacji również nie jest możliwe. Te wyzwalacze i te zadania są nadal obsługiwane przy użyciu modelu zadań w tle działających poza procesem.

Należy pamiętać, że procesy w tle mogą zostać zakończone nawet wtedy, gdy działają w procesie pierwszoplanowym aplikacji, jeśli przekroczą limity czasu wykonania. W niektórych celach odporność rozdzielenia pracy na zadanie w tle, które jest uruchamiane w osobnym procesie, jest nadal przydatne. Utrzymywanie pracy w tle jako zadania oddzielonego od aplikacji pierwszego planu może być najlepszą opcją dla pracy, która nie wymaga komunikacji z aplikacją pierwszego planu.

Podstawy

Model w procesie zwiększa cykl życia aplikacji z ulepszonymi powiadomieniami, gdy aplikacja znajduje się na pierwszym planie lub w tle. Dwa nowe zdarzenia są dostępne w obiekcie Application dla tych przejść: EnteredBackground i LeavingBackground. Te zdarzenia mieszczą się w cyklu życia aplikacji na podstawie stanu widoczności aplikacji Przeczytaj więcej o tych zdarzeniach i sposobie ich wpływu na cykl życia aplikacji w cyklu życia aplikacji.

Ogólnie będziesz obsługiwać zdarzenie EnteredBackground, aby uruchomić kod, który będzie wykonywany podczas działania aplikacji w tle, oraz obsługiwać LeavingBackground, aby wiedzieć, kiedy aplikacja została przeniesiona na pierwszy plan.

Rejestruj wyzwalacz zadania w tle

Działanie w tle procesu jest rejestrowane podobnie jak działanie w tle poza procesem. Wszystkie wyzwalacze w tle zaczynają się od rejestracji przy użyciu BackgroundTaskBuilder. Konstruktor ułatwia zarejestrowanie zadania w tle przez ustawienie wszystkich wymaganych wartości w jednym miejscu:

var builder = new BackgroundTaskBuilder();
builder.Name = "My Background Trigger";
builder.SetTrigger(new TimeTrigger(15, true));
// Do not set builder.TaskEntryPoint for in-process background tasks
// Here we register the task and work will start based on the time trigger.
BackgroundTaskRegistration task = builder.Register();

Uwaga / Notatka

Aplikacje uniwersalne systemu Windows muszą wywoływać RequestAccessAsync przed zarejestrowaniem dowolnego typu wyzwalacza w tle. Aby upewnić się, że aplikacja uniwersalna systemu Windows będzie nadal działać prawidłowo po wydaniu aktualizacji, należy wywołać RemoveAccess, a następnie wywołać RequestAccessAsync po uruchomieniu aplikacji po aktualizacji. Aby uzyskać więcej informacji, zobacz Wytyczne dotyczące zadań w tle.

W przypadku procesów działających w tle, nie należy ustawiać TaskEntryPoint.; pozostawienie tego pola pustym włącza domyślny punkt wejścia, nową chronioną metodę w obiekcie aplikacji o nazwie OnBackgroundActivated().

Po zarejestrowaniu wyzwalacza zostanie on uruchomiony zgodnie z typem wyzwalacza ustawionym w metodzie SetTrigger. W powyższym przykładzie używana jest TimeTrigger, która zostanie wyzwolona piętnaście minut od chwili zarejestrowania.

Dodaj warunek, aby kontrolować, kiedy zadanie zostanie uruchomione (opcjonalnie)

Możesz dodać warunek, aby kontrolować, kiedy zadanie zostanie uruchomione po wystąpieniu zdarzenia wyzwalacza. Jeśli na przykład nie chcesz, aby zadanie było uruchamiane, dopóki użytkownik nie będzie obecny, użyj warunku UserPresent. Aby uzyskać listę możliwych warunków, zobacz SystemConditionType.

Poniższy przykładowy kod przypisuje warunek wymagający obecności użytkownika:

builder.AddCondition(new SystemCondition(SystemConditionType.UserPresent));

Umieść swój kod działania w tle w metodzie OnBackgroundActivated()

Umieść kod działania w tle w OnBackgroundActivated, aby reagować na wyzwalacz w tle, gdy zostanie uruchomiony. Element OnBackgroundActivated może być traktowany tak jak IBackgroundTask.Run. Metoda ma parametr BackgroundActivatedEventArgs , który zawiera wszystko, co dostarcza metoda Run . Na przykład w App.xaml.cs:

using Windows.ApplicationModel.Background;

...

sealed partial class App : Application
{
  ...

  protected override void OnBackgroundActivated(BackgroundActivatedEventArgs args)
  {
      base.OnBackgroundActivated(args);
      IBackgroundTaskInstance taskInstance = args.TaskInstance;
      DoYourBackgroundWork(taskInstance);  
  }
}

Aby uzyskać bardziej rozbudowany OnBackgroundActivated przykład, zobacz Konwertuj usługę aplikacji do uruchamiania w tym samym procesie co aplikacja hosta.

Obsługa postępu i ukończenia zadania wykonywanego w tle

Postęp i ukończenie zadania można monitorować tak samo jak w przypadku zadań w tle obejmujących wiele procesów (zobacz Monitorowanie postępu i ukończenia zadania w tle), ale prawdopodobnie łatwiej będzie je śledzić przy użyciu zmiennych do śledzenia postępu lub stanu ukończenia w aplikacji. Jest to jedna z zalet posiadania kodu działania w tle działającego w tym samym procesie co aplikacja.

Obsługa anulowania zadań w tle

Zadania w toku procesu są anulowane w taki sam sposób, jak zadania w tle poza procesem (zobacz Obsługa anulowanego zadania w tle). Należy pamiętać, że program obsługi zdarzeń BackgroundActivated musi zakończyć działanie przed anulowaniem, w przeciwnym razie cały proces zostanie przerwany. Jeśli aplikacja pierwszego planu zostanie nieoczekiwanie zamknięta po anulowaniu zadania w tle, sprawdź, czy procedura obsługi zakończyła się przed anulowaniem.

Manifest

W przeciwieństwie do zadań w tle poza procesem, nie trzeba dodawać informacji o zadaniu w tle do manifestu pakietu w celu uruchamiania zadań w tle w procesie.

Podsumowanie i następne kroki

Teraz należy zrozumieć podstawy pisania zadania w tle w procesie.

Zapoznaj się z następującymi tematami pokrewnymi, aby zapoznać się z dokumentacją interfejsu API, wskazówkami koncepcyjnymi dotyczącymi zadań w tle i bardziej szczegółowymi instrukcjami dotyczącymi pisania aplikacji korzystających z zadań w tle.

Szczegółowe instrukcje dotyczące zadań w tle

Wskazówki dotyczące zadań w tle

Dokumentacja referencyjna interfejsu API zadań w tle