2015-02-12 180 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」。改變結腸到一段時間是我所要做的。