2014-10-15 2 views
2

Im имея проблему с фоновыми задачами в WP8.1 я создал фоновую задачу в качестве компонента во время выполнения окна ниже этого урока: http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh977055.aspxWindows Phone 8.1 Background Task - Можно не Debug и не будет стрелять

Проблема в том, что я не могу запустить фоновое задание. Он работает onNetworkChange. Когда я могу в режиме полета и обратно, он не стреляет. Когда я перехожу к событиям жизненного цикла на панели инструментов «Отладка», он говорит «Нет фоновых задач». Я отлаживал код, который регистрирует фоновое задание, и он регистрируется. Я также получаю «Эта точка останова в настоящее время не будет удалена. Для этого документа не были загружены символы, которые, по моему мнению, вызывают проблему.

Я пробовал - удаление папки bin и obj и восстановление. - очистка проекта. - пытается построить проект с нуля. - поворот Только моя опция кода выключена. - пытался сделать то же самое на другой машине, все равно ничего.

Мой код для регистрации

var taskRegistered = false; 
     var exampleTaskName = "UploadTask"; 

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

     if (!taskRegistered) 
     { 
      var builder = new BackgroundTaskBuilder(); 

      builder.Name = exampleTaskName; 
      builder.TaskEntryPoint = "Tasks.Upload"; 
      builder.SetTrigger(new SystemTrigger(SystemTriggerType.NetworkStateChange, false)); 
      BackgroundTaskRegistration task = builder.Register(); 
     } 

пакета файл манифеста выглядит следующим образом

<Extensions> 
    <Extension Category="windows.backgroundTasks" EntryPoint="Tasks.Upload"> 
     <BackgroundTasks> 
     <Task Type="systemEvent" /> 
     <m2:Task Type="deviceUse" /> 
     </BackgroundTasks> 
    </Extension> 
    </Extensions> 

Моя задача выглядит следующим образом:

namespace Tasks 
{ 
public sealed class Upload : IBackgroundTask 
{ 
    public void Run(IBackgroundTaskInstance taskInstance) 
    { 
     Debug.WriteLine("Am i even getting here?"); 
    } 
    } 
} 

Может кто-нибудь помочь, как я потратил гораздо слишком долго, чтобы это работало. Благодаря

+0

Добавили ли вы свою задачу в * Декларации * в манифесте? Также проверьте его точку входа. – Romasz

+0

Да, это в объявлениях :( –

+0

Можете ли вы попытаться добавить 'await BackgroundExecutionManager.RequestAccessAsync();' непосредственно перед 'var builder = new BackgroundTaskBuilder();'? – Romasz

ответ

4

Как я попробовал ваш код, есть проблема с этим конкретным SystemTriggerType.NetworkStateChange - на самом деле я не вижу зарегистрированный BackgroundTask в Lifecycle События раскрывающихся. Но если я только изменяю SystemTriggerType, например, SystemTriggerType.TimeZoneChange, то я могу его увидеть.

Вот код изменен немного:

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.TimeZoneChange, false)); 
    BackgroundTaskRegistration task = builder.Register(); 
    await new MessageDialog("Task registered!").ShowAsync(); 
} 

Я не уверен, почему с оригинальной кодой BackgroundTask не виден в VS, хотя он регистрируется - это в BackgroundTaskRegistration. AllTasks - в этом случае, возможно, попробуйте отладить с различными SystemTriggerType и swich к желаемому с выпуском версии.

Я также протестировал если BackgroundTask с проблемным SystemTriggerType.NetworkStateChange работа - и на самом деле - это работает. Я изменил ваш BackgroundTask немного, чтобы отправить тост-сообщение, когда NetworkState изменений. После регистрации задачи, когда я включаю/выключаю Wi-Fi, я получаю тост-месгу. Код для выполнения этой задачи:

public sealed class Upload : IBackgroundTask 
{ 
    public void Run(IBackgroundTaskInstance taskInstance) 
    { 
     Debug.WriteLine("Hello Pat"); 
     ToastTemplateType toastTemplate = ToastTemplateType.ToastText02; 
     XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(toastTemplate); 
     XmlNodeList textElements = toastXml.GetElementsByTagName("text"); 
     textElements[0].AppendChild(toastXml.CreateTextNode("Upload Task - Yeah")); 
     textElements[1].AppendChild(toastXml.CreateTextNode("I'm message from your Upload task!")); 
     ToastNotificationManager.CreateToastNotifier().Show(new ToastNotification(toastXml)); 
    } 
} 

полный пример вам can download here.

+0

Большое спасибо :) –

+0

@ Alex702 Означает ли это, что он также работает в вашем случае? – Romasz

+0

Да, это работает! благодаря! –