WinRT IBackgroundTask不会运行

时间:2014-06-08 06:09:03

标签: c# windows-runtime windows-8.1

我创建了一个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

1 个答案:

答案 0 :(得分:2)

正如我所尝试的那样,为了让你的代码运行,我只需要在我的主项目中将 Reference 添加到RuntimeComponent(带有BackgroundTask)。

enter image description here

请注意(您现在可能已经是)MSDN stands

  

使用维护触发器的后台任务仅在系统连接到交流电源时运行。