Question

J'essaie d'enregistrer une tâche en arrière-plan et j'obtiens un comportement étrange.Il semble que la tâche elle-même s'enregistre et se déclenche au bon moment ;cependant, quand il se déclenche, il ferme mon programme (sans erreur).

Je soupçonne que la raison est liée au fait que le programme ne me demande pas si je souhaite autoriser l'exécution d'une tâche en arrière-plan lors de mon lancement.J'ai créé une déclaration pour la tâche en arrière-plan en tant qu'événement système et je m'inscris comme ceci à partir de App.Xaml.cs :

var builder = new BackgroundTaskBuilder();

builder.Name = "NewTask";
builder.TaskEntryPoint = "ConnectionMonitor.CheckInternet";
builder.SetTrigger(new SystemTrigger(SystemTriggerType.InternetAvailable, false));

BackgroundTaskRegistration task = builder.Register();

Donc, je crois que ma question est la suivante :pourquoi ne me demanderait-il pas l'autorisation d'exécuter une tâche en arrière-plan (ce qui, je suppose, me donnera la réponse à mon principal problème : pourquoi il plante) ?

Je ne sais pas si cela est important, mais il s'agit d'une application Windows universelle (le app.xaml.cs ci-dessus se trouve dans le Shared projet.

La tâche ressemble à ceci :

BackgroundTaskDeferral _deferral = taskInstance.GetDeferral();

bool newConnected = IsConnected();
if (connected != newConnected)
{
    connected = newConnected;
    var notifier = ToastNotificationManager.CreateToastNotifier();
    var template = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText02);

    var element = template.GetElementsByTagName("text")[0];
    element.AppendChild(template.CreateTextNode(connected ? "Connection available" : "Connection lost"));

    var toast = new ToastNotification(template);
    notifier.Show(toast);  
}

_deferral.Complete();
Était-ce utile?

La solution

Tu as demandé: pourquoi ne me demanderait-il pas l'autorisation d'exécuter une tâche en arrière-plan ?

La réponse est que, à moins que votre tâche en arrière-plan ne nécessite un accès à l'écran de verrouillage, elle ne nécessite pas l'autorisation de l'utilisateur pour être enregistrée.De par sa conception, il n'y a pas d'invite utilisateur.L'un des objectifs de cette conception est qu'elle vous permet d'enregistrer une tâche à partir d'une autre tâche.

Sous Windows, vous n'avez pas besoin d'appeler BackgroundExecutionManager.RequestAccessAsync() sauf pour l'accès à l'écran de verrouillage.L'appeler vous donnera plus de quota mais nécessitera que l'utilisateur approuve la tâche.

Dans Windows Phone, appeler RequestAccessAsync() est requis quoi qu'il arrive, mais n'invite jamais l'utilisateur avec une interface utilisateur.Pour cette raison, la logique de votre application universelle peut être partagée mais aura probablement un #if de gérer l'inscription différemment, le cas échéant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top