Pendaftaran tugas latar belakang grup

API penting

Kelas BackgroundTaskRegistrationGroup

Tugas latar belakang sekarang dapat didaftarkan dalam grup, yang dapat Anda anggap sebagai namespace logis. Isolasi ini membantu memastikan bahwa komponen aplikasi yang berbeda, atau pustaka yang berbeda, tidak mengganggu pendaftaran tugas latar belakang satu sama lain.

Saat aplikasi dan kerangka kerja (atau pustaka) yang digunakannya mendaftarkan tugas latar belakang dengan nama yang sama, aplikasi secara tidak sengaja dapat menghapus pendaftaran tugas latar belakang kerangka kerja. Penulis aplikasi juga dapat secara tidak sengaja menghapus pendaftaran tugas latar belakang kerangka kerja dan pustaka karena mereka dapat membatalkan pendaftaran semua tugas latar belakang terdaftar dengan menggunakan BackgroundTaskRegistration.AllTasks. Dengan grup, Anda dapat mengisolasi pendaftaran tugas latar belakang Anda sehingga ini tidak terjadi.

Fitur grup

  • Grup dapat diidentifikasi secara unik oleh GUID. Mereka juga dapat memiliki string nama ramah terkait yang lebih mudah dibaca saat penelusuran kesalahan.
  • Beberapa tugas latar belakang dapat didaftarkan dalam grup.
  • Tugas latar belakang yang terdaftar dalam grup tidak akan muncul di BackgroundTaskRegistration.AllTasks. Dengan demikian aplikasi yang saat ini menggunakan BackgroundTaskRegistration.AllTasks untuk membatalkan pendaftaran tugas mereka tidak akan membatalkan pendaftaran tugas latar belakang yang terdaftar dalam grup secara tidak sengaja. Lihat Membatalkan pendaftaran tugas latar belakang dalam grup di bawah ini untuk melihat cara membatalkan pendaftaran semua pemicu latar belakang yang telah didaftarkan sebagai bagian dari grup.
  • Setiap Pendaftaran Tugas Latar Belakang akan memiliki properti Grup untuk menentukan grup mana yang terkait dengannya.
  • Mendaftarkan tugas latar belakang Dalam Proses dengan grup akan menyebabkan aktivasi melalui peristiwa BackgroundTaskRegistrationGroup.BackgroundActivated alih-alih Application.OnBackgroundActivated.

Mendaftarkan tugas latar belakang dalam grup

Berikut ini memperlihatkan cara mendaftarkan tugas latar belakang (dipicu oleh perubahan zona waktu, dalam contoh ini) sebagai bagian dari grup.

private const string groupFriendlyName = "myGroup";
private const string groupId = "3F2504E0-4F89-41D3-9A0C-0305E82C3301";
private const string myTaskName = "My Background Trigger";

public static void RegisterBackgroundTaskInGroup()
{
   BackgroundTaskRegistrationGroup group = BackgroundTaskRegistration.GetTaskGroup(groupId);
   bool isTaskRegistered = false;

   // See if this task already belongs to a group
   if (group != null)
   {
       foreach (var taskKeyValue in group.AllTasks)
       {
           if (taskKeyValue.Value.Name == myTaskName)
           {
               isTaskRegistered = true;
               break;
           }
       }
   }

   // If the background task is not in a group, register it
   if (!isTaskRegistered)
   {
       if (group == null)
       {
           group = new BackgroundTaskRegistrationGroup(groupId, groupFriendlyName);
       }

       var builder = new BackgroundTaskBuilder();
       builder.Name = myTaskName;
       builder.TaskGroup = group; // we specify the group, here
       builder.SetTrigger(new SystemTrigger(SystemTriggerType.TimeZoneChange, false));

       // Because builder.TaskEntryPoint is not specified, OnBackgroundActivated() will be raised when the background task is triggered
       BackgroundTaskRegistration task = builder.Register();
   }
}

Membatalkan pendaftaran tugas latar belakang dalam grup

Berikut ini memperlihatkan cara membatalkan pendaftaran tugas latar belakang yang terdaftar sebagai bagian dari grup. Karena tugas latar belakang yang terdaftar dalam grup tidak muncul di BackgroundTaskRegistration.AllTasks, Anda harus melakukan iterasi melalui grup, menemukan tugas latar belakang yang didaftarkan ke setiap grup, dan membatalkan pendaftarannya.

private static void UnRegisterAllTasks()
{
    // Unregister tasks that are part of a group
    foreach (var groupKeyValue in BackgroundTaskRegistration.AllTaskGroups)
    {
        foreach (var groupedTask in groupKeyValue.Value.AllTasks)
        {
            groupedTask.Value.Unregister(true); // passing true to cancel currently running instances of this background task
        }
    }

    // Unregister tasks that aren't part of a group
    foreach(var taskKeyValue in BackgroundTaskRegistration.AllTasks)
    {
        taskKeyValue.Value.Unregister(true); // passing true to cancel currently running instances of this background task
    }
}

Daftarkan Kejadian Persisten

Saat menggunakan Grup Pendaftaran Tugas Latar Belakang dengan tugas latar belakang dalam proses, aktivasi latar belakang diarahkan ke acara grup alih-alih yang ada di objek Aplikasi atau CoreApplication. Ini memungkinkan beberapa komponen dalam aplikasi Anda untuk menangani aktivasi daripada menempatkan semua jalur kode aktivasi di objek Aplikasi. Berikut ini menunjukkan cara mendaftar untuk peristiwa yang diaktifkan latar belakang grup. Pertama periksa BackgroundTaskRegistration.GetTaskGroup untuk menentukan apakah grup telah terdaftar. Jika tidak, buat grup baru dengan id Anda dan nama yang mudah diingat. Kemudian daftarkan penanganan aktivitas ke peristiwa BackgroundActivated pada grup.

void RegisterPersistentEvent()
{
    var group = BackgroundTaskRegistration.GetTaskGroup(groupId);
    if (group == null)
    {
        group = new BackgroundTaskRegistrationGroup(groupId, groupFriendlyName);
    }

    group.BackgroundActivated += MyEventHandler;
}