Я пытаюсь понять, почему фоновый набор не запускается, но я понятия не имею, что я делаю неправильно.Фоновая задача не запускается
Что я пытаюсь сделать: я хочу иметь автоматическую фоновую задачу, которая будет загружать 5 последних элементов через WebApi (данные составляют пару 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 проекте.
Даже с отладчиком прилагается (отлаживать программу без запуска приложения, и сила огня задание), оно не ударил мою задачу (или контрольную точку) и в EventViewer это дает результат:
Фоновая задача с точкой входа Tasks.UpdateItemTask и имя TimeTriggeredTask не удалось активировать с кодом ошибки 0x80010008.
Я проверял The samples of MS background Tasks, но даже те, кто не помогает. Я бы предположил, что это не так сложно, но я не могу заставить его работать.
может быть просто сообщение о регистрации в вашей задаче, чтобы узнать, не может ли он его просто найти. – Dreamwalker
Отладчик работает без проблем, только он не попадает в точку останова при запуске задачи, а это значит, что задача даже не запущена ... Я бы сказал, что запись в задание не поможет, поскольку задача не выполняется вообще ... –
Я только что прочитал [документ] (http://www.microsoft.com/en-us/download/details.aspx?id=27411) о категории триггера обслуживания , Этот триггер - фактически SystemTrigger, а не TimeTrigger (определенный в моем appmanifest). Я изменил это, но все равно никакого результата. У меня все еще такое же сообщение об ошибке ... –