Pour une application Windows 8, en C # / XAML, j'essaie d'enregistrer une tâche d'arrière-plan. C'est difficile à dire mais je suppose que ma tâche de fond est bien enregistrée, mais lorsque je clique sur le nom de ma tâche de base sur la barre d'outils de l'emplacement de débogage, mon application arrête de fonctionner sans aucun message.
J'ai regardé le journal sur la visionneuse d'événements et je reçois: "La tâche d'arrière-plan avec point d'entrée myApp.Pages.samplebackgroundTask and Name Exemple de fond horaire Echec de l'activation avec le code d'erreur 0x80010008." P>
P> Voici mon code: P>
public sealed class SampleBackgroundTask : IBackgroundTask { public void Run(IBackgroundTaskInstance taskInstance) { BackgroundTaskDeferral _deferral = taskInstance.GetDeferral(); _deferral.Complete(); } }
5 Réponses :
J'ai aussi eu ce problème. J'ai aussi eu des miens dans le même projet. Je l'ai finalement fait fonctionner en déplaçant la tâche dans un projet séparé. Je devais définir la sortie du projet en tant que composant d'exécution Windows (sous Propriétés Applaiton Tab). N'oubliez pas non plus d'ajouter le projet sous forme de référence. P>
Merci! Cette information est géniale!
Vous avez besoin de la permission de l'utilisateur avant de pouvoir exécuter un fond d'arrière-plan que vous pouvez le faire manuellement: En ouvrant l'application et en cliquant sur les autorisations dans le charme des paramètres et en tournant le paramètre d'écran de verrouillage sur On.
Vous pouvez également inviter l'utilisateur lorsque le premier écran est chargé avec ceci: P>
BackgroundAccessStatus status = await BackgroundExecutionManager.RequestAccessAsync();
Ajoutez votre projet de travail d'arrière-plan dans le projet principal à la référence et à la reconstruction. Cela fonctionnera p>
Deux ans plus tard, Winrt WinRT dans Windows 10, Visual Studio 2015. Encore une fois, le même problème.
L'Asker a indiqué que leur tâche de fond résidait dans le même projet. Cela ne fonctionnera pas: un article très approfondi sur les tâches d'arrière-plan est ici . De plus, comme Tim noté, BackgroundexecutionManager.RequestaCessAsyNC () doit être appelé en premier. Depuis 8.1, cependant, quand c'est omis, L'enregistrement de la tâche de fond échouera dans ce cas , de sorte que vous n'auriez donc jamais à la place où la gâchette de la tâche échoue. p>
résumer les exigences: p>
Dans mon exemple, j'avais définitivement fait tous ces éléments, mais la tâche ne serait pas déclenchée. La trace de débogage a montré "Le programme" Background Maskhost.exe "" a été sorti par le code 1 ", le débogueur s'est enfoncé sur une exécutionGenerException et le journal des événements de la machine cible (applications et journaux de services -> Microsoft -> Windows -> Backgroundtaskinfrastructure -> opérationnel) Répertorié toutes sortes de codes d'erreur de Windows entièrement créatifs entièrement non documentés: p>
"La tâche d'arrière-plan avec point d'entrée et nom n'a pas pu activer avec le code d'erreur 0x8007001F (resp. 0x800706BE (0x80131509)." p>
Les échecs étaient erratiques: au début, ils ne se sont produits que rarement et ont pris pire sur plusieurs pistes successives, jusqu'à ce que la tâche d'arrière-plan ne soit jamais appelée plus. p>
lorsque le nom de l'espace de noms du Les tâches de base ont été modifiées (dans la totalité de l'enregistrement de la tâche, le manifeste de l'emballage et le code), ceci corrigé l'erreur au début, puis a été aggravé au fil du temps. P>
La circonstance spéciale dans ce cas était que l'application a été développée sur une machine cible distante et débogué avec le débogueur à distance. Supprimer le package d'applications avant que chaque débogueur ne soit débarrassé des erreurs. P>
Donc, ces erreurs lors de l'exécution d'une tâche d'arrière-plan (0x8007001F / 0x800706BE / 0x80131509) semblent avoir à suivre pour ne pas trouver la tâche enregistrée correctement. Cela pourrait vous aider à s'assurer que la tâche est correctement déréguée et de supprimer le package d'applications avant d'exécuter une nouvelle modification. Commande PowerShell: P>
Get-AppPackage | where name -eq <myAppPackageGuid> | Remove-AppPackage
La clé pour moi était que l'application et i> le composant WinRT a dû cibler la même version de Windows. Dans mon cas, ma composante WinRT avec la tâche de base ciblait la mise à jour de l'anniversaire et que mon application ciblait la mise à jour du créateur. Une fois aligné, la tâche d'arrière-plan a été exécutée de manière appropriée.
Le problème que j'avais en écrivant des tâches d'arrière-plan était que, sous Windows 10 sous Paramètres-> Privacy-> Applications de base, je devais activer l'option d'autoriser des applications à exécuter en arrière-plan. J'espère que cela aide quelqu'un! P>
Eh bien, pour commencer, vous avez une méthode
async code> sans un
attendre code> dedans, ce qui devrait être un avertissement du compilateur.
MyApp.Pages.SamplebackgroundTask dans un projet séparé dans la même solution?
Non, la tâche est dans une classe différente de l'une de mes pages de projet. Devrait-il être sur un projet différent? J'ai édité ma question pour ajouter le code de la tâche.