C# Uwp在用户登录时执行backgroundtask
我正在学习win10 uwp,我的目标是在用户登录时执行一个操作,比如更新磁贴 我已经检查了msdn,似乎我需要一个背景任务。因此,我按照说明创建并注册了一个后台任务,该任务可以在这里和相关页面上找到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
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();
myBackgroundTask
的命名空间和类放置在同一解决方案下的单独项目中,并添加到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的事件查看器并搜索与我的应用程序相关的事件。或者更好,查看日志中标记为错误的所有事件。