1

我有一个大问题。

我为 Windows Phone 7.1+ 编写了一个应用程序,它也在 Windows Phone Store 上发布:这个应用程序适用于 Windows Phone 7.1 和 Windows Phone 8,并且在应用程序提交过程中没有问题(谁还声明我的应用程序完全兼容自 Windows Phone 7.5 以来的任何操作系统)。

问题仅与我的有关Scheduled Agent,它在 Windows Phone Mango (7.1) 上完美运行,但在 Windows Phone 8 上根本没有触发(我还在真实设备上测试了我的应用程序,两个操作系统)。

当我升级到Visual Studio 2012 (Express for Windows Phone)时,我注意到可以添加两种不同类型的ScheduledTaskAgent项目:一种用于 Windows Phone 7.5,另一种用于 Windows Phone 8(显然在 Visual 中并非如此Studio 2010 ...我使用了唯一可用的=第一个)!

  1. 您认为这可能是计划代理在 WP8 中不起作用的原因吗?
  2. 这两种项目类型有什么区别?
  3. 如何管理(我的意思是代码)该类型的两个项目?可能吗?
  4. 如何选择我必须注册的任务(见下面的代码)?
  5. 两个项目的提交过程是否会失败ScheduledTaskAgent(我认为是这样)?

这是代码的关键部分,当我在启动时注册我的任务时:

PeriodicTask newTask = new PeriodicTask("MyTaskID");

newTask.Description = "my Description";

ScheduledActionService.Add(newTask);

#if DEBUG
Microsoft.Phone.Scheduler.ScheduledActionService.LaunchForTest("MyTaskID", TimeSpan.FromSeconds(5));
#endif

先感谢您。

4

2 回答 2

2

两种项目类型之间的唯一区别是 (1) Windows Phone 8 的目标是 Windows Phone 8 而不是 7.1 和 (2) 它引用 Windows Phone 8 SDK 而不是 Windows Phone 7 dll。

我有一个应用程序,其中有两个项目(7.1 和 8.0)。我还有两个后台代理项目(7.1 和 8.0),我使用链接文件在它们之间共享代码。我从 8.0 项目中引用了 8.0 代理,从 7.1 项目中引用了 7.1 代理。我将此示例用作拥有两个代码版本的最佳实践。

您不想引用两个代理,因为这不起作用。

如果您删除#if DEBUG,您的代理会在您调试时被调用吗?

于 2012-12-19T18:45:56.237 回答
0

首先确保您在应用清单文件中获得了正确的引用。

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

其次,必须在主应用程序项目中引用代理库。
第三,确保您没有超过允许的运行时间或内存分配。在 WP8 中,后台代理的上限提高到 11MB。此外,注册后台任务的应用程序也有限制,因此您的任务可能没有空闲插槽用于 bg 代理。

于 2012-12-19T20:01:32.297 回答