Client.GetAsync在我的Windows 8 Metro应用程序的后台任务中运行时对我来说似乎失败了。
我尝试同时使用TimeTrigger和MaintenanceTrigger。看来也不例外。当调试它时,它只会在那一行退出(如果我一直按step over),尽管还有很多事情要执行,还有一个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(); }
}
}
}
以下是我申报的一些细节。