2013-02-20 12 views
3

백그라운드 작업이 시작되지 않는 이유를 알아 내려고했지만, 내가 잘못하고있는 것을 전혀 모릅니다.백그라운드 작업이 시작되지 않음

무엇을하려고합니까? WebApi를 통해 5 개의 최신 항목을 다운로드하는 자동화 된 백그라운드 작업을 원합니다 (데이터는 몇 kB입니다). 다운로드 한 후 로컬 파일을 검사하여 사용 가능한 새 항목이 있는지 확인합니다. 그렇다면 새 항목 수가 많은 LiveTile에 배지를 만들고 싶습니다.

나는 다음과 같은 코드가 있습니다

private BackgroundTaskRegistration ScheduleBackgroundTask() 
{ 
    foreach (var cur in BackgroundTaskRegistration.AllTasks) 
    { 
     if (cur.Value.Name == "TimeTriggeredTask") 
     { 
      return (BackgroundTaskRegistration)(cur.Value); 
     } 
    } 

    var builder = new BackgroundTaskBuilder(); 

    builder.Name = "TimeTriggeredTask"; 
    builder.TaskEntryPoint = "Tasks.UpdateItemTask"; 
    builder.SetTrigger(new MaintenanceTrigger(15, false)); 
    builder.AddCondition(new SystemCondition(SystemConditionType.InternetAvailable)); 
    builder.AddCondition(new SystemCondition(SystemConditionType.UserNotPresent)); 

    BackgroundTaskRegistration task = builder.Register(); 
    return task; 
} 

을 그리고 내 작업은 다음과 같습니다 : 내 appmanifest에서

namespace Tasks 
{ 
    public sealed class UpdateItemTask : IBackgroundTask 
    { 
     public async void Run(IBackgroundTaskInstance taskInstance) 
     { 
      Debug.WriteLine("Starting"); 

      BackgroundTaskDeferral _deferral = taskInstance.GetDeferral(); 

      DataHandler dataHandler = new DataHandler(); 
      BindableCollection<GeekAndPokeItemViewModel> latestItemsOnline = await dataHandler.GetData("10"); 
      BindableCollection<GeekAndPokeItemViewModel> latestItemsLocal = await dataHandler.GetLocalData(); 

      int difference = latestItemsOnline.Except(latestItemsLocal).Count(); 

      if (difference > 0) 
      { 
       BadgeUpdateManager.CreateBadgeUpdaterForApplication().Clear(); 
       BadgeNumericNotificationContent badgeContent = new BadgeNumericNotificationContent((uint)difference); 

       // send the notification to the app's application tile 
       BadgeUpdateManager.CreateBadgeUpdaterForApplication().Update(badgeContent.CreateNotification()); 
      } 

      _deferral.Complete(); 
     } 
    } 
} 

backgroundTask가 작업 "타이머"로하고 올바른 엔트리 포인트로 확장됩니다.

모든 코드는 1 개의 프로젝트에 있습니다. 심지어 (작업을 해고하는 응용 프로그램을 시작하지 않고 프로그램을 디버깅, 힘)에 부착 된 디버거

, 그것은 늘 내 작업 (또는 중단 점)을 명중하고 이벤트 표시기에서이 결과 제공 :

진입 점 Tasks.UpdateItemTask 및 이름 TimeTriggeredTask가있는 백그라운드 작업이 오류 코드 0x80010008로 활성화되지 못했습니다.

나는 The samples of MS background Tasks을 확인했지만 도움이되지 않습니다. 나는 이것이 어렵지 않다고 제안 할 것이다. 그러나 나는 그것을 기울인다.

+0

어쩌면 방금 작업을 로깅 메시지로 찾아서 찾을 수 없습니까? – Dreamwalker

+0

디버거가 문제없이 실행 중입니다. 태스크 시작시 중단 점에 도달하지 않습니다. 즉, 태스크가 시작되지 않았 음을 의미합니다. 태스크를 로깅하는 것이 작업이 전혀 실행되지 않습니다 ... –

+0

방금 ​​유지 관리 트리거의 범주에 대한 [문서] (http://www.microsoft.com/en-us/download/details.aspx?id=27411) . 이 트리거는 실제로 (내 appmanifest에 정의 된) TimeTrigger 대신 SystemTrigger입니다. 나는 이것을 바꿨지만 여전히 결과가 없다. 나는 여전히 같은 오류 메시지를 가지고있다. ... –

답변

6

마침내 작동했습니다!

첫 번째 : 작업을 Windows RT 구성 요소 유형으로 새 어셈블리로 옮기고 WinRT 응용 프로그램에 참조를 추가했습니다.

두 번째 : BackgroundTaskRegistration과 UpdateItemTask가 1 cs 파일에 있으며 봉인 된 작업 만있었습니다. 컴파일하기 위해 BackgroundTaskRegistration을 봉인 된 것으로 설정해야했습니다. 방아쇠를 당기게되면 브레이크 포인트에 도달하게됩니다 ...

관련 문제