我在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?");
}
}
}
任何人都可以提供帮助,因为我花了很长时间才开始工作。感谢
答案 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.AllTasks - 在这种情况下,可能尝试使用不同的 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的完整示例。