【问题标题】:background task in windows phone 8.1windows phone 8.1中的后台任务
【发布时间】:2014-10-15 22:16:06
【问题描述】:

我正在使用第 3 方 rest api 来查询数据并将其显示在我的应用程序中。我必须在晚上 12 点左右执行一项任务。它将执行后台任务以从 rest api 查询数据并更新动态磁贴并生成通知。我只想将 C# 用于此任务。我不知道完成这项任务的最佳方法是什么。但是我使用下面的代码来执行后台任务来做到这一点,这是行不通的。不知道为什么?

BackgroundTaskBuilder taskBuilder = new BackgroundTaskBuilder();
taskBuilder.Name = taskName;
SystemTrigger trigger = new SystemTrigger(SystemTriggerType.InternetAvailable, false);
taskBuilder.SetTrigger(trigger);
taskBuilder.AddCondition(new SystemCondition(SystemConditionType.InternetAvailable));
taskBuilder.TaskEntryPoint = typeof(BackgroundTask.BackgroundTask).FullName;
taskBuilder.Register();

我正在从后台任务中查询数据并生成 toast 通知。

任何帮助说明为什么此代码不起作用或何时触发此任务。有没有更好的方法来完成上述任务?

谢谢

【问题讨论】:

标签: c# windows-phone-8.1 toast background-task


【解决方案1】:

关于你没有工作的代码......

对于与 Windows 8\8.1 不同的 Windows Phone 8.1,您需要在注册任务之前调用 BackgroundExecutionManager.RequestAccessAsync()(搜索 MSDN\internet)以获取任何后台任务,而在 Windows 中,这仅对某些任务是必需的。在注册后台任务之前,请确保您的代码调用并验证返回值。

关于了解您的任务是否“有效”...

最好让后台任务实现运行 (IBackgroundTask::Run()) 独立于您设置的触发器\条件,以确保通过调试它可以正常执行。请参阅以下链接中的说明:http://msdn.microsoft.com/en-US/library/windows/apps/xaml/jj542416.aspx

关于您使用SystemConditionType.InternetAvailable...

我对此不是 100% 的,但我很确定这将是多余的,因为您已经有一个 SystemTriggerType.InternetAvailable。我不知道触发器会触发但条件不成立的情况。

关于你提到的要求......

如果我正确理解您的要求,您在这里有不同的选择:

  1. 如果您的应用是需要基于时间运行的 Windows Phone XAML 应用,我建议使用 TimeTriggerMaintenanceTrigger 触发器(而不是 SystemTrigger)。这些都是后台任务。有关后台任务的一般信息以及指向 TimeTriggerMaintenanceTrigger 文档的链接,请参阅此 MSDN 链接:http://msdn.microsoft.com/en-US/library/windows/apps/xaml/hh977056.aspx
  2. 如果您的应用是 Windows Phone Silverlight 8.0 应用,您可以使用后台代理,特别是 PeriodicTaskResourceIntensiveTask。查看其他人发布的链接或搜索 MSDN\internet 了解更多信息。
  3. 如果您的应用是 Windows Phone Silverlight 8.1 应用,您可以使用上述 1 或 2 中的选项。

【讨论】:

    【解决方案2】:

    我认为您应该尝试使用PeriodicTask。还要考虑链接中提到的约束。

    【讨论】:

    • 是的,这是 TimeTask 的一个很好的替代方案。我猜@Romasz 的建议是很好的解决方案,我会在其中添加 InternetConnectivity 条件。
    【解决方案3】:

    使用输出类型创建一个类:Windows 运行时组件 并把你的类从 IBackroundTask 继承,这样就可以了 如果您使用模拟器启动应用程序,我认为您的注册任务应用程序在模拟器中未激活。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多