C# WinRT IBackgroundTask赢得';跑不动
我创建了一个C# WinRT IBackgroundTask赢得';跑不动,c#,windows-runtime,windows-8.1,C#,Windows Runtime,Windows 8.1,我创建了一个IBackgroundTask,当它运行时,它会终止应用程序,VisualStudio停止调试。我找不到一个办法来看看是什么引起的。当异常为:CLR Exceptions:抛出时,我已启用了Break,但它没有中断。我如何找出导致此错误的原因 舱单: <Extension Category="windows.backgroundTasks" EntryPoint="Path.To.Task"> <BackgroundTasks> <Task
IBackgroundTask
,当它运行时,它会终止应用程序,VisualStudio停止调试。我找不到一个办法来看看是什么引起的。当异常为:CLR Exceptions:抛出时,我已启用了Break,但它没有中断。我如何找出导致此错误的原因
舱单:
<Extension Category="windows.backgroundTasks" EntryPoint="Path.To.Task">
<BackgroundTasks>
<Task Type="systemEvent" />
</BackgroundTasks>
</Extension>
任务登记员:
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;
}
更新
我注释掉了任务中的所有代码,它将消失,因此它似乎与任务中的代码无关
解决方案
通过在事件查看器中启用日志记录,我可以找到错误所在
解决我的问题的方法是将任务放入一个单独的程序集中,并将实现IBackgroundTask
的类标记为sealed
,正如我所尝试的,为了让代码运行,我只需在主项目中添加对RuntimeComponent的引用(带有BackgroundTask)
请注意(您现在可能已经)是:
使用维护触发器的后台任务仅在系统连接到交流电源时运行
该任务是我的Windows 8.1项目的一部分,而不是在单独的程序集中。@从我所读到的内容来看,它必须是一个运行时组件。正如我所尝试的,如果我把这个类放在主项目中,它就会停止工作。我会尝试一下。我想这个例子只是展示了如何将它作为一个例子放在一个单独的程序集中,因为其中会涉及一些额外的步骤。
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;
}