Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Belangrijke API's
klasse BackgroundTaskRegistrationGroup
Achtergrondtaken kunnen nu worden geregistreerd in een groep, die u kunt beschouwen als een logische naamruimte. Deze isolatie zorgt ervoor dat verschillende onderdelen van een app of verschillende bibliotheken elkaars registratie van achtergrondtaken niet verstoren.
Wanneer een app en het door haar gebruikte framework (of bibliotheek) een achtergrondtaak met dezelfde naam registreren, kan de app per ongeluk de registratie van achtergrondtaken van het framework verwijderen. App-auteurs kunnen ook per ongeluk framework- en bibliotheekachtergrondtaakregistraties verwijderen, omdat ze de registratie van alle geregistreerde achtergrondtaken ongedaan kunnen maken met behulp van BackgroundTaskRegistration.AllTasks. Met groepen kunt u uw achtergrondtaakregistraties isoleren, zodat dit niet gebeurt.
Functies van groepen
- Groepen kunnen uniek worden geïdentificeerd door een GUID. Ze kunnen ook een bijbehorende vriendelijke naam hebben die gemakkelijker te lezen is tijdens het debuggen.
- Meerdere achtergrondtaken kunnen worden geregistreerd in een groep.
- Achtergrondtaken die zijn geregistreerd in een groep, worden niet weergegeven in BackgroundTaskRegistration.AllTasks. Apps die momenteel gebruikmaken van BackgroundTaskRegistration.AllTasks om de registratie van hun taken ongedaan te maken, maken de registratie van achtergrondtaken die zijn geregistreerd in een groep niet per ongeluk ongedaan. Zie De registratie van achtergrondtaken in een groep ongedaan maken hieronder voor informatie over het ongedaan maken van de registratie van alle achtergrondtriggers die zijn geregistreerd als onderdeel van een groep.
- Elke achtergrondtaakregistratie heeft een groepseigenschap om te bepalen aan welke groep deze is gekoppeld.
- Als u In-Process achtergrondtaken bij een groep registreert, zal de activering via de BackgroundTaskRegistrationGroup.BackgroundActivated gebeurtenis verlopen in plaats van via Application.OnBackgroundActivated.
Een achtergrondtaak registreren in een groep
Hieronder ziet u hoe u een achtergrondtaak (geactiveerd door een tijdzonewijziging, in dit voorbeeld) registreert als onderdeel van een groep.
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();
}
}
Registratie van achtergrondtaken in een groep ongedaan maken
Hieronder ziet u hoe u de registratie van achtergrondtaken ongedaan maakt die zijn geregistreerd als onderdeel van een groep. Omdat achtergrondtaken die zijn geregistreerd in een groep niet worden weergegeven in BackgroundTaskRegistration.AllTasks, moet u de groepen doorlopen, de achtergrondtaken zoeken die zijn geregistreerd bij elke groep en de registratie ervan ongedaan maken.
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
}
}
Permanente gebeurtenissen registreren
Bij het gebruik van achtergrondtaakregistratiegroepen met in-process achtergrondtaken worden de achtergrondactiveringen naar de gebeurtenis van de groep geleid in plaats van naar de gebeurtenis op het Application- of CoreApplication-object. Hierdoor kunnen meerdere onderdelen in uw app de activering afhandelen in plaats van alle activeringscodepaden in het toepassingsobject te plaatsen. Hieronder ziet u hoe u zich registreert voor de op de achtergrond geactiveerde gebeurtenis van de groep. Controleer eerst BackgroundTaskRegistration.GetTaskGroup om te bepalen of de groep al is geregistreerd. Als dat niet het geval is, maakt u een nieuwe groep met uw id en vriendelijke naam. Registreer vervolgens een gebeurtenis-handler bij de gebeurtenis BackgroundActivated in de groep.
void RegisterPersistentEvent()
{
var group = BackgroundTaskRegistration.GetTaskGroup(groupId);
if (group == null)
{
group = new BackgroundTaskRegistrationGroup(groupId, groupFriendlyName);
}
group.BackgroundActivated += MyEventHandler;
}