从后台任务启动UWP应用程序

时间:2018-01-18 08:51:32

标签: c# uwp

我在此链接后创建了一个带有进程外后台任务的UWP应用

out of process background task

这是我的背景任务

namespace MyTask
{
    public sealed class FirstTask : IBackgroundTask
    {
        private BackgroundTaskDeferral backgroundTaskDeferral;
        public void Run(IBackgroundTaskInstance taskInstance)
        {
            DefaultLaunch();
        }

        async void DefaultLaunch()
        {
            // The URI to launch
            var uriBing = new Uri("mytempapp://test");
            try
            {
                // Launch the URI
                var success = await Windows.System.Launcher.LaunchUriAsync(uriBing);  // Throws Error 
             }
            catch (Exception e)
            {

            }
        }

    }
}

此后台任务在Timezone Change上激活,工作正常

BackgroundTaskBuilder taskBuilder = new BackgroundTaskBuilder { Name = "FirstTask", TaskEntryPoint = "MyTask.FirstTask" };
taskBuilder.SetTrigger(new SystemTrigger(SystemTriggerType.TimeZoneChange, false));
BackgroundTaskRegistration myFirstTask = taskBuilder.Register();

问题是当调用DefaultLaunch()时会抛出错误。理想的情况是它应该打开我的用URI方案注册的应用程序

System.Runtime.InteropService.COMException(0x80070578) invalid window Handler

This API must be called from a thread with a CC

1 个答案:

答案 0 :(得分:3)

很遗憾,您无法从后台任务启动URI。这会对用户造成干扰,因为她无法确定应用启动的原因,可能会轻易被滥用。更糟糕的是,从后台线程中,用户无法识别导致启动的应用(能够卸载恶意应用)。

如错误消息所述,此API可以仅从UI线程调用 - 表示与应用视图关联的线程。后台任务没有应用程序视图关联,因此无法启动URI。同样适用于LaunchFileAsync和其他Launcher API。