Windows Phone 8.1后台任务 - 无法调试并且无法触发

时间:2014-10-15 17:27:10

标签: c# .net windows-phone-8.1 background-task

我在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();
        }

包清单文件如下

<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?");
    }
  }
}

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

1 个答案:

答案 0 :(得分:4)

在我尝试过您的代码时,这个特定的SystemTriggerType.NetworkStateChange存在问题 - 事实上我也没有在生命周期中看到已注册的 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.NetworkStateChange BackgroundTask 是否有效 - 事实上 - 正在运行。我在 NetworkState 更改时稍微修改了 BackgroundTask 以发送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的完整示例。