UWP выполнить backgroundtask при входе пользователя
Я изучаю win10 uwp, и моя цель - выполнить операцию, например обновить плитку, когда пользователь входит в систему.
Я проверил на MSDN и кажется, что мне нужна BackgroundTask. Поэтому я следовал инструкциям по созданию и регистрации фоновой задачи, найденной здесь.https://msdn.microsoft.com/en-us/library/windows/apps/mt299100.aspx и на связанных страницах.
BackgroundTaskBuilder taskBuilder= new BackgroundTaskBuilder();
taskBuilder.Name = "TaskClassName";
taskBuilder.TaskEntryPoint = "TaskNameSpace.TaskClassName";
// set conditions (execute when user become present)
taskBuilder.SetTrigger(new SystemTrigger(SystemTriggerType.SessionConnected, false));
taskBuilder.SetTrigger(new SystemTrigger(SystemTriggerType.UserPresent, false));
var registration= taskBuilder.Register();
Пространство имен и класс моегоBackgroundTask
помещаются в отдельный проект под тем же решением и добавляются во вкладку «Объявление» Package.appxmanifest со свойствомSystem Event
выбран.
мойIBackgroundTask
реализация
public void Run(IBackgroundTaskInstance taskInstance)
{
BackgroundTaskDeferral deferral = taskInstance.GetDeferral();
UpdateMyTile();
deferral.Complete();
}
При отладке в Visual Studio код запускает correclty и обновляет плитки, поэтому я думаю, что моя проблема в том, как я зарегистрировал задачу, а не в ее реализации.
Чтобы быть уверенным, я добавил вторуюBackgroundTask
в существующий проект, который вызывается по таймеру каждые 15 минут и выполняет те же функции. Во втором случае фоновая задача регистрируется и выполняется как ожидается.
BackgroundTaskBuilder taskBuilderT= new BackgroundTaskBuilder();
taskBuilderT.Name = "TaskClassNameTimer";
taskBuilderT.TaskEntryPoint = "TaskNameSpace.TaskClassNameTimer";
taskBuilderT.SetTrigger(new TimeTrigger(15, false));
var registration= taskBuilderT.Register();
Я также пытался использовать только одинSystemTrigger
сначала сUserPresent
а затем сSessionConnected
безуспешно.
Обновление 27/01/2016
@Jakie: нет, я не использовалBackgroundExecutionManager.RequestAccessAsync();
потому что наhttps://msdn.microsoft.com/EN-US/library/windows/apps/windows.applicationmodel.background.systemtriggertype.aspx для SessionConnected и UserPresent говорит
Windows 10, Windows Server 2016 Technical Preview и Windows 10 Mobile. Вам не нужно размещать приложение на экране блокировки, чтобы приложение могло успешно зарегистрировать фоновые задачи с использованием этого типа триггера.
Я собираюсь попробовать это, чтобы видеть, изменяет ли это текущее поведение. Я добавил вызовBackgroundExecutionManager.RequestAccessAsync();
с использованием windows 10 диалог не отображался, но вернулсяAllowedMayUseActiveRealTimeConnectivity
но задача не была вызвана при входе в систему после перезагрузки.
Я запустил диагностический журнал и нашел события, относящиеся к моей фоновой задаче, он правильно зарегистрирован, но затем отменяется. В отчетах о событиях указывается eventID 19 Задача 100. Я не знаю, где искать информацию о значении этих кодов, есть предложения?