Compartir a través de


Registro de tareas en segundo plano de grupo

Las APIs importantes

clase BackgroundTaskRegistrationGroup

Las tareas en segundo plano ahora se pueden registrar en un grupo, que se puede considerar como un espacio de nombres lógico. Este aislamiento ayuda a garantizar que distintos componentes de una aplicación o bibliotecas diferentes no interfieran con el registro de tareas en segundo plano del otro.

Cuando una aplicación y el marco (o biblioteca) usan registros de una tarea en segundo plano con el mismo nombre, la aplicación podría quitar accidentalmente los registros de tareas en segundo plano del marco. Los autores de aplicaciones también podrían quitar accidentalmente los registros de tareas en segundo plano de la biblioteca y del marco porque podían anular el registro de todas las tareas en segundo plano registradas mediante BackgroundTaskRegistration.AllTasks. Con los grupos, puede aislar los registros de tareas en segundo plano para que esto no suceda.

Características de grupos

  • Los grupos se pueden identificar de forma única mediante un GUID. También pueden tener una cadena de nombre amigable asociada, que es más fácil de leer al depurar.
  • Se pueden registrar varias tareas en segundo plano en un grupo.
  • Las tareas en segundo plano registradas en un grupo no aparecerán en BackgroundTaskRegistration.AllTasks. Por lo tanto, las aplicaciones que actualmente usan BackgroundTaskRegistration.AllTasks para anular el registro de sus tareas no anularán accidentalmente el registro de las tareas en segundo plano registradas en un grupo. Consulte Anular el registro de tareas en segundo plano en un grupo a continuación para aprender a anular el registro de todos los desencadenadores en segundo plano que se han registrado como parte de un grupo.
  • Cada registro de tareas en segundo plano tendrá una propiedad Grupo para determinar a qué grupo está asociado.
  • Registrar In-Process tareas en segundo plano con un grupo hará que la activación pase por evento BackgroundTaskRegistrationGroup.BackgroundActivated en lugar de Application.OnBackgroundActivated.

Registrar una tarea en segundo plano en un grupo

A continuación se muestra cómo registrar una tarea en segundo plano (desencadenada por un cambio de zona horaria, en este ejemplo) como parte de un grupo.

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();
   }
}

Anular el registro de tareas en segundo plano en un grupo

A continuación se muestra cómo anular el registro de las tareas en segundo plano registradas como parte de un grupo. Dado que las tareas en segundo plano registradas en un grupo no aparecen en BackgroundTaskRegistration.AllTasks, debe recorrer en iteración los grupos, buscar las tareas en segundo plano registradas en cada grupo y anular su registro.

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
    }
}

Registrar eventos persistentes

Cuando se usan grupos de registro de tareas en segundo plano con tareas en segundo plano en proceso, las activaciones en segundo plano se dirigen al evento del grupo en lugar del del objeto Application o CoreApplication. Esto permite que varios componentes de la aplicación controlen la activación en lugar de colocar todas las trayectorias de código de activación dentro del objeto Aplicación. A continuación se muestra cómo registrarse para el evento activado en segundo plano del grupo. En primer lugar, compruebe BackgroundTaskRegistration.GetTaskGroup para determinar si el grupo ya se ha registrado. Si no, cree un nuevo grupo con tu identificador y nombre amistoso. A continuación, registre un controlador de eventos para el evento BackgroundActivated en el grupo.

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

    group.BackgroundActivated += MyEventHandler;
}