【发布时间】:2015-06-09 10:22:06
【问题描述】:
注册一个后台任务:
string myTaskName = "Task";
foreach (var cur in BackgroundTaskRegistration.AllTasks)
if (cur.Value.Name == myTaskName)
{
return;
}
await BackgroundExecutionManager.RequestAccessAsync();
BackgroundTaskBuilder taskBuilder = new BackgroundTaskBuilder
{
Name = "Task",
TaskEntryPoint = "Background.Task"
};
taskBuilder.SetTrigger(new TimeTrigger(15, true));
BackgroundTaskRegistration myFirstTask = taskBuilder.Register();
后台任务在 Windows 运行时组件中创建为一个单独的类:
public sealed class Task : IBackgroundTask
{
public async void Run(IBackgroundTaskInstance taskInstance)
{
BackgroundTaskDeferral deferral = taskInstance.GetDeferral();
//logic, send http get request, connect to db
deferral.Complete();
}
}
到了执行任务的时候——它可能运行随机次数(1-15次)然后自发终止不再启动,要解决这个问题需要重新注册任务。可能是什么原因?
VS 在我想运行任务时显示此错误:
【问题讨论】:
-
我不知道在 Win 8.0/8.1 上的新应用程序中的情况如何,但在 WinPhones 上,每个任务/作业都有一些运行时限制:max.memory 使用量和 max.memory 使用量。单次运行时间有限。当超过这些措施中的任何一个时,任务/作业将被终止并且其计划被禁用,直到应用程序重新运行并且任务重新从头开始重新计划。在 WinPhone 框架上,限制非常严格,
-
哦,从任务/作业中冒出的任何未处理的异常也会立即导致其计划被取消。
-
@quetzalcoatl,win 手机 8.1 上的应用程序。这不是因为对记忆的压力。我结束了 toast 通知而不是逻辑 batskground 任务。再次出现错误:C
-
原因是一个参数异常,您可以在屏幕截图中看到。
-
@Jehof,不,这不是原因。如果后台任务为空 - 我也收到此错误。 Try/catch 无法捕捉到这个错误。我不知道这个错误是如何产生的。
标签: c# windows-runtime windows-phone-8.1 background-process background-task