ScheduledActionService.LaunchForTest在初始安装后不调用ScheduledTaskAgent的OnInvoke

时间:2013-01-19 13:41:48

标签: windows-phone-7 scheduled-tasks windows-phone-8 windows-phone

首先让我说我已经让PeriodicTask工作了几天,但当我回来做其他事情时,我注意到我不再调用PeriodicTask的OnInvoke了。

我认为我正在做的基础是正确的:如果找到则删除现有的PeriodTask,仅在调试版本中调用LaunchForTest,并且我检查了项目和WMAppManifest.xml中是否正确引用了ScheduledAgent。

这是我设置PeriodicTask的方法:

            try
            {
                PeriodicTask backgroundTask = null;
                backgroundTask = ScheduledActionService.Find(BGTASK_NEW_EPISODES) as PeriodicTask;
                if (backgroundTask != null)
                {
                    ScheduledActionService.Remove(backgroundTask.Name);
                }

                // Start our background agent.
                backgroundTask = new PeriodicTask(BGTASK_NEW_EPISODES);
                backgroundTask.Description = "Foobar";

                ScheduledActionService.Add(backgroundTask);
#if DEBUG
                ScheduledActionService.LaunchForTest(BGTASK_NEW_EPISODES, TimeSpan.FromSeconds(5));
#endif
            }
            catch (InvalidOperationException e)
            {
                if (e.Message.Contains("BNS Error: The action is disabled"))
                {
                    App.showNotificationToast("Background tasks have been disabled from\nsystem settings.");
                }
            }
            catch (Exception) {  }
       }

这是我的WMAppManifest.xml:

  <ExtendedTask Name="BackgroundTask">
    <BackgroundServiceAgent Specifier="ScheduledTaskAgent" Name="PodcatcherBackgroundService" Source="PodcatcherBackgroundService" Type="PodcatcherBackgroundService.ScheduledAgent" /> 
  </ExtendedTask>

当我第一次安装应用程序时,会调用OnInvoke。但是,如果我重新启动应用程序,它就不会被调用。设备和仿真器也是如此。

我还验证了后台任务已在设置中启用,我有一个充满电的电池(设备是WP7设备,它通过USB连接到PC。对于模拟器,当然,这没关系) 。

那我接下来要检查什么?

谢谢!

1 个答案:

答案 0 :(得分:2)

好的,好像我已经解决了。

在某些情况下,我忘记在后台任务中调用NotifyComplete()。在这种情况下,Windows Phone似乎只是忽略后续尝试调用后台工作程序。