我在此链接后创建了一个带有进程外后台任务的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
答案 0 :(得分:3)
很遗憾,您无法从后台任务启动URI。这会对用户造成干扰,因为她无法确定应用启动的原因,可能会轻易被滥用。更糟糕的是,从后台线程中,用户无法识别导致启动的应用(能够卸载恶意应用)。
如错误消息所述,此API可以仅从UI线程调用 - 表示与应用视图关联的线程。后台任务没有应用程序视图关联,因此无法启动URI。同样适用于LaunchFileAsync
和其他Launcher
API。