Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les APIs importantes
classe BackgroundTaskRegistrationGroup
Les tâches en arrière-plan peuvent désormais être inscrites dans un groupe, que vous pouvez considérer comme un espace de noms logique. Cette isolation permet de s’assurer que différents composants d’une application, ou des bibliothèques différentes, n’interfèrent pas avec l’inscription des tâches en arrière-plan des autres.
Lorsqu’une application et l’infrastructure (ou bibliothèque) qu’elle utilise enregistre une tâche en arrière-plan portant le même nom, l’application peut supprimer par inadvertance les inscriptions de tâches en arrière-plan de l’infrastructure. Les auteurs d’applications peuvent également supprimer accidentellement les inscriptions de tâches en arrière-plan de l’infrastructure et de la bibliothèque, car ils peuvent annuler l’inscription de toutes les tâches en arrière-plan inscrites à l’aide d’BackgroundTaskRegistration.AllTasks. Avec les groupes, vous pouvez isoler vos inscriptions de tâches en arrière-plan afin que cela ne se produise pas.
Fonctionnalités des groupes
- Les groupes peuvent être identifiés de manière unique par un GUID. Ils peuvent également avoir une chaîne de nom convivial associée qui est plus facile à lire lors du débogage.
- Plusieurs tâches en arrière-plan peuvent être inscrites dans un groupe.
- Les tâches en arrière-plan inscrites dans un groupe n’apparaissent pas dans BackgroundTaskRegistration.AllTasks. Ainsi, les applications qui utilisent actuellement BackgroundTaskRegistration.AllTasks pour désinscrire leurs tâches ne désinscrivent pas par inadvertance les tâches en arrière-plan inscrites dans un groupe. Consultez la section Désinscrire les tâches en arrière-plan dans un groupe ci-dessous pour voir comment désinscrire tous les déclencheurs d’arrière-plan enregistrés en tant que partie d’un groupe.
- Chaque inscription de tâche en arrière-plan a une propriété Group pour déterminer le groupe auquel il est associé.
- L'enregistrement des tâches en arrière-plan In-Process auprès d’un groupe entraîne l’activation via l'événement BackgroundTaskRegistrationGroup.BackgroundActivated au lieu de Application.OnBackgroundActivated.
Inscrire une tâche en arrière-plan dans un groupe
L’exemple suivant montre comment inscrire une tâche en arrière-plan (déclenchée par une modification de fuseau horaire, dans cet exemple) dans le cadre d’un groupe.
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();
}
}
Annuler l’inscription des tâches d'arrière-plan dans un groupe
L’exemple suivant montre comment annuler l’inscription des tâches en arrière-plan inscrites dans le cadre d’un groupe. Étant donné que les tâches en arrière-plan inscrites dans un groupe n’apparaissent pas dans BackgroundTaskRegistration.AllTasks, vous devez effectuer une itération dans les groupes, rechercher les tâches en arrière-plan inscrites à chaque groupe et les désinscrire.
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
}
}
Inscrire des événements persistants
Lorsque vous utilisez des groupes d’inscription de tâches en arrière-plan avec des tâches en arrière-plan en cours, les activations en arrière-plan sont dirigées vers l’événement du groupe au lieu de celui de l’objet Application ou CoreApplication. Cela permet à plusieurs composants de votre application de gérer l’activation plutôt que de placer tous les chemins de code d’activation dans l’objet Application. L’exemple suivant montre comment s’inscrire à l’événement activé en arrière-plan du groupe. Vérifiez d’abord BackgroundTaskRegistration.GetTaskGroup pour déterminer si le groupe a déjà été inscrit. Si ce n’est pas le cas, créez un groupe avec votre ID et votre nom convivial. Inscrivez ensuite un gestionnaire d’événements à l’événement BackgroundActivated sur le groupe.
void RegisterPersistentEvent()
{
var group = BackgroundTaskRegistration.GetTaskGroup(groupId);
if (group == null)
{
group = new BackgroundTaskRegistrationGroup(groupId, groupFriendlyName);
}
group.BackgroundActivated += MyEventHandler;
}