我目前正在开发一个具有后台任务的应用,该应用应该在用户设置的时间时触发。例如,用户选择“01:45 PM”,应用程序正在计算从现在到该时间的分钟数,使用timetrigger注册后台任务。不幸的是,后台任务根本没有开火。有时它在我启动计算机后才被解雇。我感谢任何建议,因为一周后我无法解决这个问题。
我已经通过VisualStudio启动调试后台任务,因此问题不在BackgroundTask.cs文件中。
这是我的代码:
注册后台任务:
//I set the time to 15 minutes to see if this would work. It didn't...
var trigger = new TimeTrigger(15, true);
BackgroundTaskHelper.RegisterBackgroundTask("BackgroundTask.BackgroundTask", "BackgroundTask", trigger, null);
注册后台任务的方法:
public static async void RegisterBackgroundTask(string taskEntryPoint, string taskName, IBackgroundTrigger trigger, IBackgroundCondition condition)
{
foreach (var cur in BackgroundTaskRegistration.AllTasks)
{
if (cur.Value.Name == taskName)
{
cur.Value.Unregister(true);
}
}
var builder = new BackgroundTaskBuilder();
builder.Name = taskName;
builder.TaskEntryPoint = taskEntryPoint;
builder.SetTrigger(trigger);
if (condition != null)
{
builder.AddCondition(condition);
}
await BackgroundExecutionManager.RequestAccessAsync();
var task = builder.Register();
}
Package.appxmanifest Package.appxmanifest, Image
感谢您的帮助!
答案 0 :(得分:0)
创建新的TimeTrigger。第二个参数OneShot指定后台任务是仅运行一次还是定期运行。如果OneShot设置为true,则第一个参数(FreshnessTime)指定在安排后台任务之前等待的分钟数。如果OneShot设置为false,则FreshnessTime指定background task将运行的频率。
如果FreshnessTime设置为15分钟且OneShot为true,则任务将从注册时起15到30分钟之间运行一次。如果设置为25分钟且OneShot为真,则任务将从注册时起25到40分钟之间运行一次。
因此TimeTrigger
不适合您的情况。在Windows 10 UWP中,警报只是具有“警报”方案的Toast通知。要在特定时间显示警报,您可以使用预定的Toast通知。
以下代码是如何安排闹钟在特定时间出现。详情请参阅Quickstart: Sending an alarm in Windows 10。随附的sample application是一个简单的快速启动警报应用程序。
DateTime alarmTime = DateTime.Now.AddMinutes(1);
// Only schedule notifications in the future
// Adding a scheduled notification with a time in the past
// will throw an exception.
if (alarmTime > DateTime.Now.AddSeconds(5))
{
// Generate the toast content (from previous steps)
ToastContent toastContent = GenerateToastContent();
// Create the scheduled notification
var scheduledNotif = new ScheduledToastNotification(
toastContent.GetXml(), // Content of the toast
alarmTime // Time we want the toast to appear at
);
// And add it to the schedule
ToastNotificationManager.CreateToastNotifier().AddToSchedule(scheduledNotif);
}