2

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

任何人都可以帮忙,因为我花了太长时间才让它工作。谢谢

4

1 回答 1

4

当我尝试过您的代码时,这个特定的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.NetworkStateChange的BackgroundTask是否有效——而且确实——它是否有效。我已经稍微修改了您的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));
    }
}

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

于 2014-10-16T16:12:05.650 回答