2016-07-22 78 views
2

我和這個人在這裏有同樣的問題:UWP Timetrigger not working 但我不能評論這個問題,因爲我的聲望不夠高,所以我創建了一個新問題。Timetrigger not firing backgroundtask UWP

正如我所說,我有同樣的問題。我註冊了後臺任務,但沒有任何反應。我的後臺任務位於一個單獨的項目(運行時組件)中。所以這不是問題。 這是我做了登記任務的方法:

public static BackgroundTaskRegistration Register(string name, string taskEntryPoint, IBackgroundTrigger trigger, IBackgroundCondition condition) 
    { 
     var foundTask = BackgroundTaskRegistration.AllTasks.FirstOrDefault(x => x.Value.Name == name); 
     if (foundTask.Value != null) 
      return (BackgroundTaskRegistration)foundTask.Value; 

     var builder = new BackgroundTaskBuilder(); 
     builder.Name = name; 
     builder.TaskEntryPoint = taskEntryPoint; 
     builder.SetTrigger(trigger); 
     if (condition != null) 
      builder.AddCondition(condition); 

     return builder.Register(); 
    } 

,這是我怎麼稱呼它:

BackgroundTaskRegister.Register(nameof(NotificationTask), $"Epguides.Background.{_backgroundTaskName}", new TimeTrigger(30, true), null); 

當我調試我的應用程序,並使用生命週期事件在Visual Studio來測試我的背景任務,一切工作正常。所以問題不在於任務。

當我檢查BackgroundTaskRegistration結果時,我看到屬性觸發器爲空。 MSDN page BackgroundTaskRegistration.Trigger它說,以下內容

這不適用於您的代碼。對於所有不支持的觸發器類型,此屬性返回的值爲null。

因此,據我所知,TimeTrigger是不支持的觸發器類型,因爲觸發器爲空。

這就是在清單文件 Declarations

宣佈有一個人能解釋爲什麼它不工作。我正在使用版本10.0.10586

+0

一件事:「零觸發財產」是正常的行爲,我相信。我還用timetrigger事件實現了bgtask並進行了多次調試,但該屬性始終爲空,並且該任務運行良好。如果可能,我會發布其他信息作爲答案。 – pnp0a03

+0

最後回答在這[線程](http://stackoverflow.com/questions/35024842/uwp-execute-backgroundtask-at-user-login)爲我工作 –

回答

4
  1. 您可以使用powershell確認您的任務是否已註冊。 打開具有管理權限的powershell,並運行「Get-AppBackgroundTask」。列出所有已註冊的任務。如果您無法從列表中找到您的任務,註冊時會出現一些問題。

  2. 您是否將後臺任務項目添加爲主應用程序的引用?

  3. 你有沒有調用BackgroundExecutionManager.RequestAccessAsync()?您應該在註冊前從UI線程調用它。

enter image description here

  • 我的後臺任務與在商店timetrigger一個示例應用程序。它是從店面和搜索隱藏的,但你可以從下面的鏈接下載:
  • https://www.microsoft.com/store/p/ddlgbgtasktrial/9nblggh4s785

    這個程序記數以15分鐘的間隔timetrigger一個簡單的後臺任務。該任務僅將debugmessage輸出到日誌文件。該應用程序顯示日誌。如果工作正常,您可以以15分鐘左右的間隔查看調試輸出。

    我確定該應用程序可以與Win10桌面10586.494和移動版14393.0一起使用。

    +0

    這是第3點,失蹤。我看到這個任務是通過powershell註冊的,並感謝提示。我想知道如何檢查註冊是否成功。我再次檢查了MSDN,看看是否在文章中提到了如何創建和註冊後臺任務([link](https://msdn.microsoft.com/en-us/windows/uwp/launch-resume/create)註冊一個後臺任務),它是,這是一個小記錄,但我錯過了,我也必須先刪除訪問,感謝您的幫助。 –

    +0

    嗯,它似乎不工作,我想它的工作原理是因爲我在通知中心看到了一條消息,但那只是一個測試,還有其他一些關於它爲什麼不起作用的想法? –

    +0

    您是否嘗試過示例應用程序?它的應用程序也無法正常工作,我不知道。 ... – pnp0a03

    1

    我與TimeTrigger(應用程序觸發器工作沒有任何問題)完全相同的問題,我跟着從MSDN regarding BackgroundTask in UWP每一步。但是,只有下面的「魔線」幫我解決 - 大感謝@CanolGökel爲他的評論回覆(我認爲這值得單獨的答案):

    BackgroundExecutionManager.RemoveAccess(); // This is the magic line! 
    var backgroundAccessStatus = await BackgroundExecutionManager.RequestAccessAsync(); 
    

    時間觸發UWP background task sample(方案4),其中一部分正在爲我工​​作。但是這條線根本不用在那裏。相反,它檢查期間NFC樣品中使用,如果應用程序進行了更新:

    private static async Task<bool> DoBackgroundRequestAccess() 
        { 
         String appVersion = String.Format("{0}.{1}.{2}.{3}", 
           Package.Current.Id.Version.Build, 
           Package.Current.Id.Version.Major, 
           Package.Current.Id.Version.Minor, 
           Package.Current.Id.Version.Revision); 
    
         if ((string)Windows.Storage.ApplicationData.Current.LocalSettings.Values["AppVersion"] != appVersion) 
         { 
          // Our app has been updated 
          Windows.Storage.ApplicationData.Current.LocalSettings.Values["AppVersion"] = appVersion; 
    
          // Call RemoveAccess 
          BackgroundExecutionManager.RemoveAccess(); 
         } 
    
         BackgroundAccessStatus status = await BackgroundExecutionManager.RequestAccessAsync(); 
    
         return status == BackgroundAccessStatus.AlwaysAllowed 
          || status == BackgroundAccessStatus.AllowedSubjectToSystemPolicy; 
        }