使用SDK版本10586进行进程内后台任务

时间:2016-11-24 21:06:49

标签: c# uwp background-task

我想通过后台任务扩展我当前的UWP应用程序。 in-process model完全符合我的需求,因为我不需要在应用程序中进行大量更改以使用后台任务。但是,有一个问题。目前最低SDK版本设置为10586,但进程内后台任务仅适用于SDK版本14393及更高版本。

通常我会使用正常的' if-clause使用Windows.Foundation.Metadata.ApiInformation命名空间检查是否支持该功能。不幸的是,由于我重写OnBackgroundActivated方法,这是不可能的。老实说,我不想放弃10586支持,至少目前不支持。

是否有一种简单的方法可以在保留对10586的支持的同时注册进程内后台任务?

编辑:正如我在(现已删除)评论中被问到的那样:不,我还没有在构建10586上执行应用程序,因为我的互联网连接速度很慢。我问,因为当我将目标版本设置为10586时,Visual Studio不会构建应用程序。

1 个答案:

答案 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不支持该类型的任务。