Windows Phone 8.1后台任务无法注册后台任务

时间:2015-02-12 01:02:14

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

我刚从https://code.msdn.microsoft.com/windowsapps/Background-Task-Sample-9209ade9下载了示例 并尝试运行Windows Phone 8.1项目。程序运行但是即使我进行了更改以触发事件,也没有后台任务发生。我也不认为它已被注册作为后台任务运行,因为我没有收到任何将应用程序添加到锁定屏幕的请求。我无法手动将应用程序添加到锁定屏幕。 注意:使用Lumia 730和8.1牛仔布。

我还尝试用silverlight 8.1和背景作为RT组件自己编写一个示例程序。

if (BackgroundTaskRegistration.AllTasks.Any(task => task.Value.Name == name))
            {
                // One register it once
                return;
            }
    var builder = new BackgroundTaskBuilder();
                var trigger = new SystemTrigger(SystemTriggerType.UserAway, false);
                builder.Name = name;
                builder.TaskEntryPoint = typeof(MyBackgroundTask.BackClass).FullName;                   builder.SetTrigger(trigger);

                await BackgroundExecutionManager.RequestAccessAsync();
                BackgroundTaskRegistration registration = builder.Register();
                registration.Completed += RegistrationOnCompleted;

我也在线上获得例外

        BackgroundTaskRegistration registration = builder.Register();

例外是运行时状态

> A first chance exception of type 'System.Exception' occurred in
> Project1.DLL

4 个答案:

答案 0 :(得分:2)

我找到了这个问题的解决方案:

  1. 为后台任务创建运行时Windows Phone 8.1项目
  2. Windwos Phone Background Task

    1. 在yor后台任务项目中注册任务时:

      public async static void Register()
      {
          Debug.WriteLine("Registering geofence bg task");
          if (!IsTaskRegistered())
          {
              var result = await BackgroundExecutionManager.RequestAccessAsync();
              var builder = new BackgroundTaskBuilder();
      
              builder.Name = TaskName;
              builder.TaskEntryPoint = typeof(BackgroundTask.YourTaskName).FullName;
              builder.SetTrigger(new LocationTrigger(LocationTriggerType.Geofence));
              try
              {
                  builder.Register();
                  Debug.WriteLine("GeoFence Task Registered");
              }
              catch (Exception ex)
              {
                  Debug.WriteLine("GeoFence Task Failed : " + ex.Message.ToString());
              }
      
      
      
          }
          else { }
      
      }
      
    2. 确保通过将TaskEntryPoint引用到后台项目名称来正确添加它,它看起来像这样:“BackgroundTask.YourTaskName”

      1. builder.Name参数的TaskName字符串应如下所示:

        静态字符串TaskName =“BackgroundTask.YourTaskName”;

      2. 在声明选项卡下的appmanifest中声明你的TaskEntryPoint,这里我使用了GeofenceTask,所以我检查了任务所需的几个复选框:

      3. Windwos Phone Background Task 2

        在这里再次输入EntryPoint(如TaskEntryPoint):“BackgroundTask.YourTaskName”

        1. 当您在app中的某个地方初始化任务时,您可以使用:

          BackgroundTask.YourTaskName.Register();

        2. 关于任务的切入点全部。因此,如果您在单独的项目下完成任务,则必须输入该项目的名称和后台任务类的名称。

          不要仅为EntryPoint使用后台任务类名称,必须使用包含该类的项目名称引用它。

          希望它有所帮助,

答案 1 :(得分:1)

你没有提到例外是什么,也没有提到它附带的文字。这使得很难回答。

尽管如此,假设您的错误是“未注册课程”,您需要做几件事:

  1. 确保MyBackgroundTask.BackClass是Windows运行时组件项目中的一个类(它不能在您的Silverlight项目中)
  2. 确保您引用该项目(如果不这样做,您将收到编译器错误)
  3. 确保您已在声明标签上的Package.appxmanifest设计器中正确添加了后台任务条目。再次使用班级名称作为入口点

答案 2 :(得分:0)

我尝试在后台任务中添加BackgroundTaskDeferral并开始工作。我想知道为什么这只能确保异步调用。无论如何它对我有用。 谢谢你的帮助

答案 3 :(得分:0)

Same problem. Turned out my entry point parameter in Package.appxmanifest was spelled "Module:EntryPoint" rather than "Module.EntryPoint". Changing the colon to a period was all I had to do.