2014-11-04 27 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

相关问题