我和这个人有同样的问题:UWP Timetrigger not working 但我无法评论这个问题,因为我的声誉不够高,所以我正在创建一个新问题。
正如我所说,我有同样的问题。我注册了后台任务,但没有任何反应。我的后台任务位于一个单独的项目(运行时组件)中。所以这不是问题。 这是我注册任务的方法:
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中使用Lifecycle Events来测试我的后台任务时,一切正常。所以问题不是任务。
当我检查BackgroundTaskRegistration结果时,我看到属性触发器为null。在BackgroundTaskRegistration.Trigger的MSDN page上,它说明了以下内容
这不适用于您的代码。对于所有不受支持的触发器类型,此属性返回的值为null。
据我所知,TimeTrigger是一种不受支持的触发器类型,因为Trigger为null。
是否有人可以解释为什么它不起作用。我使用的是版本10.0.10586
答案 0 :(得分:5)
您可以使用PowerShell确认您的任务是否已注册。 打开具有管理权限的powershell,并运行Get-AppBackgroundTask'。列出了所有已注册的任务。如果您无法从列表中找到您的任务,则注册时会出现一些问题。
您是否已将后台任务项目添加为主应用程序的参考?
您是否调用了BackgroundExecutionManager.RequestAccessAsync()?您应该在注册之前从UI线程调用它。
https://www.microsoft.com/store/p/ddlgbgtasktrial/9nblggh4s785
此应用程序注册一个简单的后台任务,间隔时间为15分钟。此任务只是将debugmessage输出到日志文件。该应用程序显示日志。如果它运行良好,您可以以大约15分钟的间隔查看调试输出。
我已确认该应用适用于Win10桌面10586.494和移动设备14393.0。
答案 1 :(得分: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;
}