C# Windows Phone Silverlight 8.1后台代理

C# Windows Phone Silverlight 8.1后台代理,c#,silverlight,windows-phone-8.1,C#,Silverlight,Windows Phone 8.1,我正在用c#开发Silverlight 8.1应用程序。我想在我的后台定期任务中使用一些旧的电话API,所以我不能使用新的iBackgroundTaskRT接口 我创建了一个带有OnInvoke覆盖的老式后台代理,然后像以前一样在WMAppManifest.xml中注册: 其中BackgroundAgent是我的后台代理库,ScheduledAgent是我的类 我已在Package.appxmanifest中为应用程序启用Toast通知。我的通知系统是WNS(在WMAppManifest中)

我正在用c#开发Silverlight 8.1应用程序。我想在我的后台定期任务中使用一些旧的电话API,所以我不能使用新的iBackgroundTaskRT接口

我创建了一个带有OnInvoke覆盖的老式后台代理,然后像以前一样在WMAppManifest.xml中注册:

其中BackgroundAgent是我的后台代理库,ScheduledAgent是我的类

我已在Package.appxmanifest中为应用程序启用Toast通知。我的通知系统是WNS(在WMAppManifest中)

我正试图以老派的方式启动这项任务:

BackgroundExecutionManager.RequestAccessAsync();
  var periodicTask = ScheduledActionService.Find("BackgroundTask");

  if (periodicTask != null)
  {
    ScheduledActionService.Remove("BackgroundTask");
  }

  periodicTask = new PeriodicTask("BackgroundTask");
  (periodicTask as ScheduledTask).Description = "Hello, world.";
  ScheduledActionService.Add(periodicTask);

  ScheduledActionService.LaunchForTest("BackgroundTask", TimeSpan.FromSeconds(60));
在my MainPage.xaml.cs的OnNavigatedTo方法中

我可以看到这段代码正在运行

但是,我从来没有看到任何代码在我的后台代理中运行——它应该给我发送一个toast(我尝试了ShellToast和新的ToastNotificationManager,用于基于xml的toast)并进行http调用——这两种情况都没有发生

我观看了比赛™ 他们提到Silverlight 8.1应用程序应完全支持后台代理的视频

我还可以确认我的应用程序在电池节电器设置中显示为“允许”,这表示后台代理已在操作系统中注册


我做错了什么?

我认为您需要在Package.appxmanifest中有一个“System event”类型的后台任务,其入口点为“AgHost.BackgroundTask”。这就是在WP8.1 SL应用程序中托管SL后台代理的原因。如果清单文件中没有此任务,请自己添加它,并查看它是否解决了问题

更新

根据我的经验,“系统事件”类型应该可以工作,但是zaitsman说他需要使用“计时器”,所以如果第一个不适用于您,请尝试另一个

更新2

换句话说,您需要具备以下条件:

  <Extensions>
    <Extension Category="windows.backgroundTasks" EntryPoint="AgHost.BackgroundTask">
      <BackgroundTasks>
        <Task Type="systemEvent" />
        <Task Type="timer" />
      </BackgroundTasks>
    </Extension>
  </Extensions>


在WP 8.1 SL应用程序的Package.appxmanifest文件(不要与WMAppManifest.xml混淆)的应用程序标记内。

我添加了如下内容:但是,我的任务仍然没有运行..你几乎是对的-你还需要将触发器指定为'timer',它就可以工作了。@zaitsman,这很奇怪。我用系统事件测试了它,它对我来说运行良好。我会在我的回答中记下这一点。只有当我把两者都放进去时,它才真正起作用;我并不介意,我只是很高兴它终于成功了。@yasen也请添加代码,如何添加计时器和其他代码。这会更好。你能用完整的解决方案更新答案吗,这样可以帮助其他人。。