2015-02-12 123 views
1

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

回答

1

你不提例外的是什么,也没有什么伴随它的文本是。这使得很难回答。

然而,假设你的错误是“没有注册类别”你需要做的几件事情:

  1. 确保MyBackgroundTask.BackClass是在Windows运行时组件项目中的类(它不能在你的Silverlight项目)
  2. 确保您引用该项目(如果你不知道你会得到编译器错误)
  3. 确保正确添加在Package.appxmanifest设计一个后台任务项,在声明标签。 入口点
+0

对不起。但我相信手机设置存在一些问题,因为我可以在模拟器中测试程序,并且工作正常。仍然不知道如何在手机中运行应用程序 – AbsoluteSith 2015-02-12 15:35:10

+0

如果深入了解或查看输出窗口,那么在例外情况下是否没有更多信息?通常有更详细的描述。您是否可以开启省电模式?已经安装了很多后台任务?你尝试过不同的手机吗? – 2015-02-13 07:22:03

0

那么我试图在我的后台任务中添加BackgroundTaskDeferral并开始工作。我想知道为什么这只能保证异步调用。反正它为我工作。 感谢您的帮助

2

我发现这个问题的解决方案:

  1. 制作运行的Windows Phone 8.1项目为背景的任务

Windwos Phone Background Task

  • 当您在后台任务项目中注册任务时:

    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 { } 
    
    } 
    
  • 确保你正确地引用其背景项目名称添加TaskEntryPoint,它看起来是这样的: “BackgroundTask.YourTaskName”

  • TASKNAME字符串建设者。名称参数应如下所示:

    static string TaskName =“BackgroundTask。YourTaskName“;

  • 声明你TaskEntryPoint在声明选项卡下appmanifest,这里我用GeofenceTask所以我检查所需要的任务数复选框:

  • Windwos Phone Background Task 2

    在这里,您再次输入入口点(如TaskEntryPoint ):“BackgroundTask.YourTaskName”

    1. 当你在任何应用程序中创建任务时, se:

      BackgroundTask.YourTaskName.Register();

    这是所有关于任务的切入点。因此,如果您在单独的项目下完成任务(例如完成该任务),则必须在该项目下输入该项目的名称和后台任务类的名称。

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

    希望它有帮助,

    0

    同样的问题。在Package.appxmanifest中,我的入口点参数拼写为“Module:EntryPoint”,而不是“Module.EntryPoint”。改变结肠到一段时间是我所要做的。