我正在尝试注册后台任务,但出现了一些奇怪的行为。我看来任务本身正在正确的时间注册和触发;但是,当它确实触发时,它会关闭我的程序(没有错误)。

我怀疑原因与以下事实有关:程序没有询问我是我想在启动时允许后台任务运行。我已为后台任务创建了一个声明作为系统事件,并从 App.Xaml.cs 中进行如下注册:

var builder = new BackgroundTaskBuilder();

builder.Name = "NewTask";
builder.TaskEntryPoint = "ConnectionMonitor.CheckInternet";
builder.SetTrigger(new SystemTrigger(SystemTriggerType.InternetAvailable, false));

BackgroundTaskRegistration task = builder.Register();

所以,我相信我的问题是:为什么它不要求我运行后台任务的许可(我认为这会给我解决为什么崩溃的主要问题的答案)?

我不确定这是否重要,但这是一个 Windows 通用应用程序(上面的 app.xaml.cs 位于 Shared 项目。

任务如下所示:

BackgroundTaskDeferral _deferral = taskInstance.GetDeferral();

bool newConnected = IsConnected();
if (connected != newConnected)
{
    connected = newConnected;
    var notifier = ToastNotificationManager.CreateToastNotifier();
    var template = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText02);

    var element = template.GetElementsByTagName("text")[0];
    element.AppendChild(template.CreateTextNode(connected ? "Connection available" : "Connection lost"));

    var toast = new ToastNotification(template);
    notifier.Show(toast);  
}

_deferral.Complete();
有帮助吗?

解决方案

你问: 为什么它不询问我运行后台任务的权限?

答案是,除非你的后台任务需要锁屏访问,否则不需要用户的许可来注册。根据设计,没有用户提示。这种设计的目的之一是它允许您从另一个任务注册一个任务。

在 Windows 中,您不需要调用 BackgroundExecutionManager.RequestAccessAsync() 除了锁屏访问之外。调用它将为您提供更多配额,但需要用户批准该任务。

在 Windows Phone 中,拨打 RequestAccessAsync() 无论如何都是必需的,但永远不会通过 UI 提示用户。因此,您的通用应用程序中的逻辑可以共享,但可能会有一个 #if 以不同方式处理注册(如果相关)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top