Фоновая задача не запускается

Я пытаюсь понять, почему не запускается фоновая задача, но понятия не имею, что я делаю неправильно.

Что я пытаюсь сделать: я хочу иметь автоматизированную фоновую задачу, которая будет загружать 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, но даже они не помогают. Я бы предположил, что это не так сложно, но я не могу заставить его работать.


person pazcal    schedule 20.02.2013    source источник
comment
может быть, просто сообщение о регистрации в вашей задаче, чтобы увидеть, не может ли оно его найти.   -  person Dreamwalker    schedule 20.02.2013
comment
Отладчик работает без проблем, только он не достигает точки останова при запуске задачи, что означает, что задача даже не запускается... Я бы сказал, что вход в задачу не поможет, так как задача вообще не выполняется...   -  person pazcal    schedule 20.02.2013
comment
Я только что прочитал документ о категории Триггер технического обслуживания. Этот триггер на самом деле является SystemTrigger, а не TimeTrigger (определен в моем манифесте приложения). Я изменил это, но все еще нет результата. У меня все еще такое же сообщение об ошибке...   -  person pazcal    schedule 20.02.2013
comment
У меня наконец-то заработало!! Во-первых: я переместил задачи в новую сборку как тип компонента Windows RT и добавил ссылку в свое приложение WinRT. Во-вторых: у меня были BackgroundTaskRegistration и UpdateItemTask в 1 файле cs, и только задача была запечатана. Мне нужно было установить BackgroundTaskRegistration также как запечатанный, чтобы скомпилировать. Как только я принудительно запускаю триггер, он, наконец, достигает точки останова...   -  person pazcal    schedule 20.02.2013
comment
Только что увидел ваши посты, но отличные новости :)   -  person Dreamwalker    schedule 20.02.2013


Ответы (1)


У меня наконец-то заработало!!

Во-первых: я переместил задачи в новую сборку как тип компонента Windows RT и добавил ссылку в свое приложение WinRT.

Во-вторых: у меня были BackgroundTaskRegistration и UpdateItemTask в 1 файле cs, и только задача была запечатана. Мне нужно было установить BackgroundTaskRegistration также как запечатанный, чтобы скомпилировать. Как только я принудительно запускаю триггер, он, наконец, достигает точки останова...

person pazcal    schedule 05.03.2013