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.AllTask​​s 中 - 在这种情况下也许尝试使用不同的 SystemTriggerType 进行调试,然后使用发布版本切换到所需的版本。

我还测试了带有问题 SystemTriggerType.NetworkStateChangeBackgroundTask 是否工作 - 确实 - 它工作。我已经稍微修改了您的 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 时出现异常

推送通知后台任务崩溃 Windows Phone 8.1 模拟器/设备

在 Windows Phone 8.1 中从后台任务启动应用程序