2014-11-04 30 views
-2

我已經做了背景Taks演示。正是在這個問題的解決方案的95 %%副本: Windows Phone 8.1 Background Task - Can't Debug and won't fire程序在後臺事件觸發時終止

解決方案的完整的例子可以在這裏下載:http://1drv.ms/1qCPLMY

問題是,當我的事件觸發程序終止。所以在這裏http://1drv.ms/1x3z7Mp

是「我」的代碼:「我的」的解決方案可以在這裏下載

第一類實施IBackgroundTask

using System; 
using System.Collections.Generic; 
using System.Diagnostics; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using Windows.ApplicationModel.Background; 
using Windows.Data.Xml.Dom; 
using Windows.UI.Notifications; 

namespace Tasks 
{ 
    public sealed class Upload : IBackgroundTask 
    { 
     public void Run(IBackgroundTaskInstance taskInstance) 
     { 
      Debug.WriteLine("Hello IBackgroundTask"); 
      //return; 
      var toastXml = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText02); 
      var textElements = toastXml.GetElementsByTagName("text"); 

      var networkStateChangeEventDetails = (taskInstance.TriggerDetails as Windows.Networking.Connectivity.NetworkStateChangeEventDetails); 
      if (networkStateChangeEventDetails == null) 
       return; 

      textElements[0].AppendChild(toastXml.CreateTextNode("I'm message from your task!")); 
      ToastNotificationManager.CreateToastNotifier().Show(new ToastNotification(toastXml)); 
     } 
    } 
} 

這裏是登記背景TAKS代碼:

private async void Button_Click(object sender, RoutedEventArgs e) 
{ 
    Debug.WriteLine("Registering task"); 
    var taskRegistered = false; 
    var exampleTaskName = "UploadTask"; 

    foreach (var task in BackgroundTaskRegistration.AllTasks) 
    { 
     if (task.Value.Name == exampleTaskName) 
     { 
      //taskRegistered = true; 
      task.Value.Unregister(true); 
      // break; 
     } 
    } 


    await BackgroundExecutionManager.RequestAccessAsync(); 
    if (!taskRegistered) 
    { 
     Debug.WriteLine("Registering task inside"); 
     var builder = new BackgroundTaskBuilder(); 
     builder.Name = exampleTaskName; 
     builder.TaskEntryPoint = "Tasks.Upload"; 
     builder.SetTrigger(new SystemTrigger(SystemTriggerType.NetworkStateChange, false)); 
     BackgroundTaskRegistration task = builder.Register(); 
     //task.Completed += new BackgroundTaskCompletedEventHandler(NetworkStateChangeTaskOnCompleted); 
     //task.Trigger += new BackgroundTaskCompletedEventHandler(NetworkStateChangeTaskOnCompleted); 

         await new MessageDialog("Task registered!").ShowAsync(); 
    } 
} 

private void NetworkStateChangeTaskOnCompleted(BackgroundTaskRegistration sender, BackgroundTaskCompletedEventArgs args) 
{ 
    var toastXml = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText02); 
    var textElements = toastXml.GetElementsByTagName("text"); 

    textElements[0].AppendChild(toastXml.CreateTextNode("NetworkStateChangeTaskOnCompleted() =>")); 
    textElements[0].AppendChild(toastXml.CreateTextNode("I'm message from your task!")); 

    ToastNotificationManager.CreateToastNotifier().Show(new ToastNotification(toastXml)); 
} 

我也不例外,也沒有錯誤消息。該活動在事件發生時才結束。在設備和模擬器上相同。

+2

你仍然需要在你的問題中包含相關的代碼。讓你的問題自成一體,如果鏈接在未來破裂,你的問題仍然有意義。 – 2014-11-04 15:38:37

+0

有趣的事情。我發佈了一個4人討厭的問題。甚至沒有人看過它 – 2014-11-04 16:37:57

+0

沒有什麼好笑的人不希望通過整個解決方案,你已經顯示零努力調試自己或提供一個最小的問題的例子。 – 2014-11-04 16:39:02

回答

2

我檢查你的項目有幾件事情你需要改進:

  • 第一個也是最重要的 - 你BackgroundTask必須是Windows運行時組元不是類庫(像現在這樣) - 打開後臺任務的屬性並改變它。 BackgroundTask 必須是一個運行時組件 - 這就是您的程序終止的原因。
  • ,你還需要將命名空間更改爲項目的(文件的)名字 - 在這種情況下,你將有(而不是Tasks.UploadTask.Upload。也請記住在package.appxmanifest文件,以更改條目聲明

正如我已經試過這之後改變了你的應用程序應該正常工作。

+0

這個問題百萬分之一。那就是訣竅:D – 2014-11-05 07:50:13

相關問題