Windows Phone 8.1 后台任务 - 无法调试且不会触发
Posted
技术标签:
【中文标题】Windows Phone 8.1 后台任务 - 无法调试且不会触发【英文标题】:Windows Phone 8.1 Background Task - Can't Debug and won't fire 【发布时间】:2014-10-15 17:27:10 【问题描述】:我对 WP8.1 中的后台任务有疑问 我按照本教程创建了一个后台任务作为 Windows 运行时组件: http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh977055.aspx
问题是,我无法让我的后台任务运行。它在NetworkChange 上运行。当我可以进入飞行模式并返回时,它不会开火。当我转到“调试位置”工具栏中的生命周期事件时,它会显示“无后台任务”。我已经调试了注册后台任务的代码并且它正在注册。我也得到'这个断点目前不会被击中。没有为此文档加载任何符号,我认为这是导致问题的原因。
我试过了 - 删除 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();
包清单文件如下
<Extensions>
<Extension Category="windows.backgroundTasks" EntryPoint="Tasks.Upload">
<BackgroundTasks>
<Task Type="systemEvent" />
<m2:Task Type="deviceUse" />
</BackgroundTasks>
</Extension>
</Extensions>
我的任务是这样的:
namespace Tasks
public sealed class Upload : IBackgroundTask
public void Run(IBackgroundTaskInstance taskInstance)
Debug.WriteLine("Am i even getting here?");
任何人都可以帮忙,因为我花了很长时间才让它工作。谢谢
【问题讨论】:
您是否在清单的声明中添加了您的任务?另请检查其入口点。 是的,它在声明中:( 您可以尝试在var builder = new BackgroundTaskBuilder();
之前添加await BackgroundExecutionManager.RequestAccessAsync();
吗?
我也试过了。我找到了您的一些示例的链接。在我的机器上,您的示例后台任务无法运行。如此迷茫。我感觉这与视觉工作室更新有关......
奇怪的事情,你可以在设备上测试它吗?可以尝试关注this post 并检查任务是否运行吗?
【参考方案1】:
当我尝试过您的代码时,这个特定的 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();
我不确定为什么 BackgroundTask 在 VS 中不可见,尽管它正在注册 - 它在 BackgroundTaskRegistration.AllTasks 中 - 在这种情况下也许尝试使用不同的 SystemTriggerType 进行调试,然后使用发布版本切换到所需的版本。
我还测试了带有问题 SystemTriggerType.NetworkStateChange 的 BackgroundTask 是否工作 - 确实 - 它工作。我已经稍微修改了您的 BackgroundTask,以便在 NetworkState 发生变化时发送 toast 消息。注册任务后,当我打开/关闭 WiFi 时,我会收到一条吐司消息。任务代码:
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));
你can download here的完整例子。
【讨论】:
@Alex702 这是否意味着它也适用于您的情况? 你知道你是怎么解决的吗?? @Alex702 我认为它可以正常工作,但是您根本无法使用 VS 调试它(这个特殊的 SystemTriggerType) - 不要问 - 我不知道为什么。代码没有太多变化。另外请不要忘记将答案标记为解决方案(除了绿色勾号)。 需要 15 声望 :( 抱歉以上是关于Windows Phone 8.1 后台任务 - 无法调试且不会触发的主要内容,如果未能解决你的问题,请参考以下文章
Windows Phone 8.1 后台任务 - 无法调试且不会触发
Geofence windows phone 8.1中触发后台任务的阈值距离
在 Windows Phone 8.1 上运行频繁的后台任务
Windows Phone 8.1 - 从后台任务创建 WriteableBitmap 时出现异常