C# 背景任务自发完成#
注册后台任务:C# 背景任务自发完成#,c#,windows-runtime,windows-phone-8.1,background-process,background-task,C#,Windows Runtime,Windows Phone 8.1,Background Process,Background Task,注册后台任务: string myTaskName = "Task"; foreach (var cur in BackgroundTaskRegistration.AllTasks) if (cur.Value.Name == myTaskName) { return; } await BackgroundExecutionManager.RequestAccessAsync(); Backg
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在需要运行任务时显示此错误:在Windows Phone上定期执行后台任务,间隔至少30分钟 Windows有一个内置计时器,每隔15分钟运行一次后台任务请注意,在Windows Phone上,间隔为30分钟。 (来源:) 如果我是你,我会将时间间隔改为更安全的时间间隔(例如60分钟)-你可以在以后尝试更小的时间间隔。然后查看
oneShot
标志,在您的案例中,该标志设置为true
。将其设置为false
可使任务运行多次
此外,您的异常看起来并不健康。你说它甚至在后台任务为空的情况下发生-为了安全起见,你应该修复它
我建议您使用VisualStudio中的生命周期功能手动启动和调试Backgound任务几次。也许还有其他原因导致你的任务失败
但首先检查间隔。我不知道Win 8.0/8.1上的新应用程序中的间隔是如何实现的,但在WinPhone上,每个任务/作业都有一些运行时限制:最大内存使用量和最大单次运行时间都是有限的。当超过任何这些度量值时,任务/作业将被终止并禁用其计划,直到重新运行应用程序并从头开始重新计划任务。在WinPhone框架上,限制非常严格,哦,任务/作业中出现的任何未经处理的异常也会立即导致其计划被取消。@Quetzalcatl,win phone 8.1上的应用程序。这不是因为记忆上的压力。我结束了toast通知,而不是logic batskground任务。还有一个错误:CReason是一个argumentexception,正如您在屏幕截图中看到的那样。@Jehof,不,这不是原因。如果后台任务为空-我也会收到此错误。Try/catch无法捕获此错误。我不知道这个错误是怎么产生的。好的,我会试试。谢谢解决这个问题:taskBuilder.SetTrigger(newtimetrigger(15,FALSE));一杆必须是假的,你可以设置时间为15分钟。现在你已经指出了,我知道我想补充我的答案。当我看到你的问题时,我想:“一枪是真的——那不可能是对的”,但在发布我的答案时,我完全忘记了这一点:)我将编辑帖子以反映这一点。