我创建了一个IBackgroundTask
,当它运行时,它会杀死应用程序并且Visual Studio会停止调试。我无法找到导致它的原因。我打开了Break when an exception is: CLR Exceptions: Thrown
而且没有打破。如何找出导致此错误的原因?
清单:
<Extension Category="windows.backgroundTasks" EntryPoint="Path.To.Task">
<BackgroundTasks>
<Task Type="systemEvent" />
</BackgroundTasks>
</Extension>
任务:
public class Task : IBackgroundTask
{
public async void Run( IBackgroundTaskInstance taskInstance )
{
var classA = ServiceLocator.Current.GetInstance<ClassA>();
var classB = ServiceLocator.Current.GetInstance<ClassB>();
var deferral = taskInstance.GetDeferral();
if( classB.Id > 0 )
{
await classA.DoStuff( classB.Id );
}
deferral.Complete();
}
}
注册:
var trigger = new MaintenanceTrigger( 15, false );
BackgroundTaskRegistrar.RegisterBackgroundTask( "Path.To.Task", "Task Name", trigger, null );
任务注册员:
public static BackgroundTaskRegistration RegisterBackgroundTask( string taskEntryPoint, string name, IBackgroundTrigger trigger, IBackgroundCondition condition )
{
foreach( var pair in BackgroundTaskRegistration.AllTasks )
{
if( pair.Value.Name == name )
{
return (BackgroundTaskRegistration)pair.Value;
}
}
var builder = new BackgroundTaskBuilder
{
Name = name,
TaskEntryPoint = taskEntryPoint
};
builder.SetTrigger( trigger );
if( condition != null )
{
builder.AddCondition( condition );
}
var task = builder.Register();
return task;
}
更新
我注释掉了任务中的所有代码,它会死掉,所以它似乎与任务中的代码无关。
解决方案
通过在此处指定的事件查看器中启用登录,我能够找到错误。 http://msdn.microsoft.com/en-us/library/windows/apps/xaml/jj542416.aspx
解决我的问题的原因是将任务放入单独的程序集中,并将实现IBackgroundTask
的类标记为sealed
。
答案 0 :(得分:2)
正如我所尝试的那样,为了让你的代码运行,我只需要在我的主项目中将 Reference 添加到RuntimeComponent(带有BackgroundTask)。
请注意(您现在可能已经是)MSDN stands:
使用维护触发器的后台任务仅在系统连接到交流电源时运行。