Windows Phone 8.1后台任务 – 无法调试,也不会触发

我在WP8.1中遇到了后台任务的问题我在本教程之后创建了一个后台任务作为Windows运行时组件: http : //msdn.microsoft.com/en-us/library/windows/apps/xaml/hh977055的.aspx

问题是,我无法运行后台任务。 它运行在NetworkChange上。 当我能够飞行模式并返回时它不会发射。 当我转到Debug Location工具栏中的生命周期事件时,它会显示No Background tasks。 我已经调试了注册后台任务的代码,并且它已经注册了。 我也得到’这个断点目前不会被击中。 没有为此文档加载任何符号,我认为这会导致问题。

我试过 – 删除bin和obj文件夹并重建。 – 清理项目。 – 尝试从头开始构建项目。 – 关闭我的代码选项。 – 尝试在另一台机器上做同样的事情,仍然没有。

我的注册代码

var taskRegistered = false; var exampleTaskName = "UploadTask"; foreach (var task in BackgroundTaskRegistration.AllTasks) { if (task.Value.Name == exampleTaskName) { taskRegistered = true; break; } } if (!taskRegistered) { var builder = new BackgroundTaskBuilder(); builder.Name = exampleTaskName; builder.TaskEntryPoint = "Tasks.Upload"; builder.SetTrigger(new SystemTrigger(SystemTriggerType.NetworkStateChange, false)); BackgroundTaskRegistration task = builder.Register(); } 

包清单文件如下

         

我的任务看起来像这样:

 namespace Tasks { public sealed class Upload : IBackgroundTask { public void Run(IBackgroundTaskInstance taskInstance) { Debug.WriteLine("Am i even getting here?"); } } } 

任何人都可以提供帮助,因为我花了很长时间才开始工作。 谢谢

在我尝试过您的代码时,这个特定的SystemTriggerType.NetworkStateChange存在问题 – 实际上我也没有在Lifecycle Events下拉列表中看到注册的BackgroundTask 。 但是,如果我只将SystemTriggerType更改为SystemTriggerType.TimeZoneChange ,那么我就能看到它。

这里修改了一下代码:

 await BackgroundExecutionManager.RequestAccessAsync(); if (!taskRegistered) { Debug.WriteLine("Registering task inside"); var builder = new BackgroundTaskBuilder(); builder.Name = exampleTaskName; builder.TaskEntryPoint = "Tasks.Upload"; builder.SetTrigger(new SystemTrigger(SystemTriggerType.TimeZoneChange, false)); BackgroundTaskRegistration task = builder.Register(); await new MessageDialog("Task registered!").ShowAsync(); } 

我不确定原始代码为什么在VS中看不到BackgroundTask ,虽然它正在注册 – 它位于BackgroundTaskRegistration.AllTask​​s中 – 在这种情况下可能尝试使用不同的SystemTriggerType进行调试并使用发布版本切换到所需的版本。

我还测试了有问题的SystemTriggerType.NetworkStateChangeBackgroundTask是否有效 – 事实上 – 它是否正常工作 。 我已经修改了你的BackgroundTask,以便在NetworkState更改时发送Toast消息。 注册任务后,当我打开/关闭WiFi时,我会得到一个toast messgae。 任务的代码:

 public sealed class Upload : IBackgroundTask { public void Run(IBackgroundTaskInstance taskInstance) { Debug.WriteLine("Hello Pat"); ToastTemplateType toastTemplate = ToastTemplateType.ToastText02; XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(toastTemplate); XmlNodeList textElements = toastXml.GetElementsByTagName("text"); textElements[0].AppendChild(toastXml.CreateTextNode("Upload Task - Yeah")); textElements[1].AppendChild(toastXml.CreateTextNode("I'm message from your Upload task!")); ToastNotificationManager.CreateToastNotifier().Show(new ToastNotification(toastXml)); } } 

您可以在此处下载完整的示例。