2016-07-22 46 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; 
        }