Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Uwp在用户登录时执行backgroundtask_C#_Uwp_Background Task - Fatal编程技术网

C# Uwp在用户登录时执行backgroundtask

C# Uwp在用户登录时执行backgroundtask,c#,uwp,background-task,C#,Uwp,Background Task,我正在学习win10 uwp,我的目标是在用户登录时执行一个操作,比如更新磁贴 我已经检查了msdn,似乎我需要一个背景任务。因此,我按照说明创建并注册了一个后台任务,该任务可以在这里和相关页面上找到 BackgroundTaskBuilder taskBuilder= new BackgroundTaskBuilder(); taskBuilder.Name = "TaskClassName"; taskBuilder.TaskEntryPoint = "TaskNameSpace.TaskC

我正在学习win10 uwp,我的目标是在用户登录时执行一个操作,比如更新磁贴

我已经检查了msdn,似乎我需要一个背景任务。因此,我按照说明创建并注册了一个后台任务,该任务可以在这里和相关页面上找到

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();
my
BackgroundTask
的命名空间和类放置在同一解决方案下的单独项目中,并添加到Package.appxmanifest的声明选项卡中,并选择属性
System Event

我的
IBackgroundTask
实现是

    public void Run(IBackgroundTaskInstance taskInstance)
    {
        BackgroundTaskDeferral deferral = taskInstance.GetDeferral();

        UpdateMyTile();

        deferral.Complete();
    }
在使用visual studio进行调试时,代码会正确运行并更新分幅,因此我认为我的问题在于如何注册任务,而不是在任务实现中

为了确保这一点,我在现有项目中添加了第二个
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
,但没有成功

更新日期:2016年1月27日

@不,我没有使用
BackgroundExecutionManager.RequestAccessAsync()
因为SessionConnected和UserPresent的开启表示

Windows 10、Windows Server 2016技术预览版和Windows 10 Mobile:在应用程序可以使用此触发器类型成功注册后台任务之前,无需将应用程序置于锁定屏幕上

我将尝试一下,看看这是否会改变当前的行为。 我已经添加了对
BackgroundExecutionManager.RequestAccessAsync()的调用,使用windows 10未显示任何对话框,但它已返回
AllowedMayUseActiveRealTimeConnectivity
,但在重新启动后登录时未调用任务


我已启动诊断日志并找到与后台任务相关的事件,它已正确注册,但随后被取消。事件报告显示eventID 19任务100。我不知道从哪里搜索这些代码的含义,有什么建议吗?

我终于成功地在用户登录时更新了一个互动程序。除了问题中已经描述的操作之外,我还将任务注册的方法移动到了声明后台任务类的同一个项目中

我创建了一个包含注册方法的类,名为
BackgroundRegistration
,该类需要
密封。我已将注册方法声明为
静态
,但这并不是严格必需的

只有在
IBackgroundTask run
方法实现中调用的所有方法都包含在带有后台任务的项目中,并且使用的类都是
密封的时,我才成功地在启动用户登录时运行后台任务。在所有其他情况下,我发现我的后台任务总是返回错误0x80010008,在MS-ERREF中描述为:

调用方(客户端)在被调用方(服务器)运行时消失 处理电话


您可以检查应用程序事件日志中的后台任务日志吗?还要注意,您是否正在等待BackgroundExecutionManager.RequestAccessAsync();在注册后台任务之前?如何查找后台任务返回的内容?@alekkowalczyk使用windows->windows Logs->Application的事件查看器并搜索与我的应用程序相关的事件。或者更好,查看日志中标记为错误的所有事件。