Windows 8 Metro アプリのバックグラウンド タスクで実行すると、Client.GetAsync が失敗するように見えます。
TimeTrigger と MaintenanceTrigger の両方を使用してみました。例外はないようです。それをデバッグするとき、それはその行で終了します(ステップオーバーを押し続けると)、実行する方法が他にもあり、その周りにtry-catchがあります。
これにより、Windows がタスクをキャンセルしていると思われます。というわけで、運悪くキャンセルされたイベントを聞いてしまいました。
インターネット アクセスを機能として宣言し、タスクが適切に登録されました。さらに、私のアプリはロック画面に完全にアクセスできます。
私は何を間違っていますか?
現在、バックグラウンド タスクを登録するために使用しているコードを次に示します。
if (await ObtainLockScreenAccess())
{
const string name = "Task";
var updaterTasks = BackgroundTaskRegistration.AllTasks.Where(t => t.Value.Name == name);
if (!updaterTasks.Any())
{
var builder = new BackgroundTaskBuilder();
builder.Name = name;
builder.TaskEntryPoint = "Stackstabilizer.BackgroundTasks.UpdateBackgroundTask";
var trigger = new MaintenanceTrigger(15, false);
var condition = new SystemCondition(SystemConditionType.InternetAvailable);
builder.AddCondition(condition);
builder.SetTrigger(trigger);
var task = builder.Register();
Debug.WriteLine("Task has been registered");
}
}
編集バックグラウンド タスクのシグネチャは次のとおりです。
namespace Stackstabilizer.BackgroundTasks
{
// You must use a sealed class, and make sure the output is a WINMD.
public sealed class UpdateBackgroundTask : IBackgroundTask
{
public async void Run(IBackgroundTaskInstance taskInstance)
{
var deferral = taskInstance.GetDeferral();
try { ... } finally { deferral.Complete(); }
}
}
}
そして、ここに私の宣言の詳細があります。