我想通过后台任务扩展我当前的UWP应用程序。 in-process model完全符合我的需求,因为我不需要在应用程序中进行大量更改以使用后台任务。但是,有一个问题。目前最低SDK版本设置为10586,但进程内后台任务仅适用于SDK版本14393及更高版本。
通常我会使用正常的' if-clause使用Windows.Foundation.Metadata.ApiInformation
命名空间检查是否支持该功能。不幸的是,由于我重写OnBackgroundActivated
方法,这是不可能的。老实说,我不想放弃10586支持,至少目前不支持。
是否有一种简单的方法可以在保留对10586的支持的同时注册进程内后台任务?
编辑:正如我在(现已删除)评论中被问到的那样:不,我还没有在构建10586上执行应用程序,因为我的互联网连接速度很慢。我问,因为当我将目标版本设置为10586时,Visual Studio不会构建应用程序。答案 0 :(得分:1)
你要覆盖的OnBackgroundActivated
方法不是问题,因为在10586它根本就不会被调用。要在项目的“属性”中为两个版本创建项目,请设置目标版本,如下所示:
Target versions in Applications tab
调用BackgroundExecutionManager.RequestAccessAsync();
会导致一些麻烦。在10586上使用的此方法调用期望您在Package.appxmanifest中定义了BackgroundTask,而在您的情况下则不需要,因为根据documentation不需要它。因此,为了重用代码,请将注册过程中BackgroundTask的方法更改为以下内容:
public static async Task<bool> RegisterInProcessBackgroundTask(string taskName, uint time = 30) {
try {
await BackgroundExecutionManager.RequestAccessAsync();
BackgroundTaskBuilder taskBuilder = new BackgroundTaskBuilder();
taskBuilder.Name = taskName;
taskBuilder.SetTrigger(new TimeTrigger(time, false));
BackgroundTaskRegistration registration = taskBuilder.Register();
return true;
} catch {
return false;
}
}
这将在14393+上运行并返回true
,因为任务已成功注册并在捕获异常后返回false
,因为10586不支持该类型的任务。