Uwp executa backgroundtask no login do usuário
Estou aprendendo o win10 uwp e meu objetivo é realizar uma operação, como atualizar um bloco, quando o usuário efetuar login.
Eu verifiquei no msdn e parece que um BackgroundTask é o que eu preciso. Então, segui as instruções para criar e registrar uma tarefa em segundo plano encontrada aquihttps://msdn.microsoft.com/en-us/library/windows/apps/mt299100.aspx e em páginas relacionadas.
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();
Namespace e classe do meuBackgroundTask
são colocados em um projeto separado sob a mesma solução e adicionados na guia Declaração do Package.appxmanifest com a propriedadeSystem Event
selecionado.
MinhasIBackgroundTask
implementação é
public void Run(IBackgroundTaskInstance taskInstance)
{
BackgroundTaskDeferral deferral = taskInstance.GetDeferral();
UpdateMyTile();
deferral.Complete();
}
Ao depurar com o visual studio, o código é executado corretamente e atualiza os blocos, então acho que meu problema é como registrei a tarefa e não na implementação da tarefa.
Para ter certeza de que adicionei um segundoBackgroundTask
ao projeto existente, chamado temporariamente a cada 15 minutos e que executa as mesmas funções. Nesse segundo caso, a tarefa em segundo plano é registrada e executada conforme o esperado.
BackgroundTaskBuilder taskBuilderT= new BackgroundTaskBuilder();
taskBuilderT.Name = "TaskClassNameTimer";
taskBuilderT.TaskEntryPoint = "TaskNameSpace.TaskClassNameTimer";
taskBuilderT.SetTrigger(new TimeTrigger(15, false));
var registration= taskBuilderT.Register();
Eu também tentei usar apenas umSystemTrigger
primeiro comUserPresent
e depois comSessionConnected
sem sucesso.
Atualização 27/01/2016
@Jakie: não, eu não useiBackgroundExecutionManager.RequestAccessAsync();
porque emhttps://msdn.microsoft.com/EN-US/library/windows/apps/windows.applicationmodel.background.systemtriggertype.aspx para SessionConnected e UserPresent, diz
Windows 10, Visualização técnica do Windows Server 2016 e Windows 10 Mobile: você não precisa colocar um aplicativo na tela de bloqueio para que o aplicativo possa registrar com êxito tarefas em segundo plano usando esse tipo de gatilho.
Vou tentar ver se isso muda o comportamento atual. Adicionei chamada paraBackgroundExecutionManager.RequestAccessAsync();
, usando o Windows 10, nenhuma caixa de diálogo foi exibida, mas retornouAllowedMayUseActiveRealTimeConnectivity
mas a tarefa não foi chamada no logon após uma reinicialização.
Comecei o log de diagnóstico e encontrei os eventos relativos à minha tarefa em segundo plano, está registrado corretamente, mas é cancelado. Os relatórios de eventos indicam eventID 19 Tarefa 100. Não sei onde procurar informações sobre o significado desses códigos, alguma sugestão?