我遵循了Microsoft创建和注册后台任务的指导原则:https://msdn.microsoft.com/en-us/library/windows/apps/mt299100.aspx
我有我的主项目,它使用触发器等注册后台任务,以及另一个保存后台任务代码的Windows运行时组件项目,并由我的主项目引用 .
我注册后台任务的代码是:
bool registered = false;
foreach (var task in BackgroundTaskRegistration.AllTasks)
{
if (task.Value.Name == "BackgroundGPS")
{
registered = true;
}
}
if (!registered)
{
var builder = new BackgroundTaskBuilder();
builder.Name = "BackgroundGPS";
builder.TaskEntryPoint = "BackgroundTasks.BackgroundGPSTask";
BackgroundExecutionManager.RemoveAccess();
var x = await BackgroundExecutionManager.RequestAccessAsync();
var trigger = new TimeTrigger(15, false);
builder.SetTrigger(trigger);
BackgroundTaskRegistration task = builder.Register();
//Here trigger property of 'task' is null.
}
}
我的后台任务永远不会运行,因为看起来触发器永远不会触发 . 我调试了代码,根据我的评论,BackgroundTaskRegistration变量的触发器属性为null .
现在,我尝试使用SystemTrigger而不是TimeTrigger并且它可以工作,该属性不为null . 我看到触发器属性被描述为“如果触发器类型不受支持则为null” .
为什么TimeTrigger不受支持?我打电话给 RequestAccessAsync()
获取锁屏访问权限,并在允许的情况下返回 . 我've also added '计时器' to the task types of the '后台任务' declaration of my main project' s应用程序清单 . 根据Microsoft的所有建议,TimeTrigger是让后台任务在计时器上运行的唯一方法(MaintenanceTrigger仅在插入电源时才有效) .
关于此,有两个类似的SO问题:
Can't register a Time triggered Background Task
BackgroundTaskRegistration trigger property is null
其中一个没有任何答案,另一个我已经实施过的建议 .
有人能帮忙吗?
1 回答
我认为这是一个文件问题 . backgroundtaskregistration触发器属性在我这边也是null,但时间触发器确实有效 .
我不知道你是怎么测试它的 . 但是,进行以下测试将表明它确实有效 .
手动卸载您的应用以避免任何意外行为 .
使用非常简单的实现定义后台任务,如下所示 .
在Visual Studio中,开始调试您的应用程序 . 注册后台任务后,单击生命周期事件工具栏并选择后台任务,如下所示 . 这将强制后台任务运行 . 拿这个机会来检查是否有任何问题 .
转到以下文件夹,检查是否可以看到test.txt文件存在 . 将{用户名}替换为已登录用户 . 在Visual Studio中,在设计器中打开项目的package.appxmanifest,切换到打包选项卡,最后一行是,用它替换占位符 .