Я пытаюсь понять, почему не запускается фоновая задача, но понятия не имею, что я делаю неправильно.
Что я пытаюсь сделать: я хочу иметь автоматизированную фоновую задачу, которая будет загружать 5 последних элементов через WebApi (данные составляют пару килобайт). После загрузки он проверит локальный файл, чтобы увидеть, есть ли какие-либо новые элементы. Если это так, я хочу создать значок на 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();
}
}
}
В моем манифесте приложения backgroundTask расширен с помощью «таймера» задачи и с правильной точкой входа.
Весь код находится в 1 проекте.
Даже с подключенным отладчиком (отладить программу без запуска приложения и принудительно запустить задачу) он не попадет в мою задачу (или точку останова), а в средстве просмотра событий он дает результат:
Фоновую задачу с точкой входа Tasks.UpdateItemTask и именем TimeTriggeredTask не удалось активировать с кодом ошибки 0x80010008.
Я проверял образцы фоновых задач MS, но даже они не помогают. Я бы предположил, что это не так сложно, но я не могу заставить его работать.