1

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

我怀疑原因与程序没有问我是否要在启动时允许后台任务运行这一事实有关。我已经为后台任务创建了一个声明作为系统事件,并从 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();
4

1 回答 1

0

你问:为什么它不要求我允许运行后台任务?

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

BackgroundExecutionManager.RequestAccessAsync()在 Windows 中,除了锁定屏幕访问之外,您不需要调用。调用它会给你更多的配额,但需要用户批准任务。

在 Windows Phone 中,RequestAccessAsync()无论如何都需要调用,但从不使用 UI 提示用户。出于这个原因,您的通用应用程序中的逻辑可以共享,但可能需要#if以不同的方式处理注册(如果相关)。

于 2014-06-06T16:07:43.850 回答