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

バックグラウンド タスクを実行する許可を求めないのはなぜですか?

答えは、バックグラウンド タスクがロック画面へのアクセスを必要としない限り、ユーザーの許可を登録する必要がないということです。設計上、ユーザー プロンプトはありません。この設計の目的の 1 つは、別のタスクからタスクを登録できるようにすることです。

BackgroundExecutionManager.RequestAccessAsync()Windows では、ロック画面へのアクセス以外は呼び出す必要はありません。それを呼び出すと、クォータが増えますが、ユーザーはタスクを承認する必要があります。

RequestAccessAsync()Windows Phone では、何があっても電話をかける必要がありますが、UI でユーザーにプロンプ​​トを表示することはありません。このため、ユニバーサル アプリのロジックは共有できますが#if、必要に応じて登録を別の方法で処理する必要があります。

于 2014-06-06T16:07:43.850 に答える