我试图弄清楚为什么后台任务无法启动,但我不知道我做错了什么。
我想做什么:我想要一个自动化的后台任务,它将通过 WebApi 下载 5 个最新项目(数据是几 kB)。下载后会检查本地文件,看是否有新项目可用。如果是这样,我想在 LiveTile 上创建一个带有新项目数量的徽章。
我有以下代码:
private BackgroundTaskRegistration ScheduleBackgroundTask()
{
foreach (var cur in BackgroundTaskRegistration.AllTasks)
{
if (cur.Value.Name == "TimeTriggeredTask")
{
return (BackgroundTaskRegistration)(cur.Value);
}
}
var builder = new BackgroundTaskBuilder();
builder.Name = "TimeTriggeredTask";
builder.TaskEntryPoint = "Tasks.UpdateItemTask";
builder.SetTrigger(new MaintenanceTrigger(15, false));
builder.AddCondition(new SystemCondition(SystemConditionType.InternetAvailable));
builder.AddCondition(new SystemCondition(SystemConditionType.UserNotPresent));
BackgroundTaskRegistration task = builder.Register();
return task;
}
我的工作是这样的:
namespace Tasks
{
public sealed class UpdateItemTask : IBackgroundTask
{
public async void Run(IBackgroundTaskInstance taskInstance)
{
Debug.WriteLine("Starting");
BackgroundTaskDeferral _deferral = taskInstance.GetDeferral();
DataHandler dataHandler = new DataHandler();
BindableCollection<GeekAndPokeItemViewModel> latestItemsOnline = await dataHandler.GetData("10");
BindableCollection<GeekAndPokeItemViewModel> latestItemsLocal = await dataHandler.GetLocalData();
int difference = latestItemsOnline.Except(latestItemsLocal).Count();
if (difference > 0)
{
BadgeUpdateManager.CreateBadgeUpdaterForApplication().Clear();
BadgeNumericNotificationContent badgeContent = new BadgeNumericNotificationContent((uint)difference);
// send the notification to the app's application tile
BadgeUpdateManager.CreateBadgeUpdaterForApplication().Update(badgeContent.CreateNotification());
}
_deferral.Complete();
}
}
}
在我的 appmanifest 中,backgroundTask 使用任务“计时器”和正确的入口点进行了扩展。
所有代码都在 1 个项目中。
即使附加了调试器(在不启动应用程序的情况下调试程序,并强制触发任务),它也不会命中我的任务(或断点),并且在事件查看器中它会给出以下结果:
具有入口点 Tasks.UpdateItemTask 和名称 TimeTriggeredTask 的后台任务无法激活,错误代码为 0x80010008。
我一直在检查MS 背景任务的样本,但即使是那些也没有帮助。我建议这并不难,但我无法让它发挥作用。