【发布时间】:2017-04-21 14:46:10
【问题描述】:
在我的 UWP 项目中,我正在使用进程中的后台任务。该任务在不同情况下通过计时器触发每 15 分钟运行一次:
案例 1:应用程序运行时 - 在这种情况下,一切正常。
案例 2:当应用程序关闭时 - 只要应用程序仍然关闭,什么都没有发生。
请帮我解决这个问题?
代码: //这是我的BackgroundTask.Run方法
var deferral = taskInstance.GetDeferral();
if (!IsApplicationClosed)
{
//When application is running
await Dispatcher.RunAsync(WCoreDispatcherPriority.Normal, () => {
UpdateUI();
});
}
else
{
UpdateDataStorage();
}
deferral.Complete();
//这是我的 OnBackgroundActivated 方法
base.OnBackgroundActivated(args);
var deferral = args.TaskInstance.GetDeferral();
switch (args.TaskInstance.Task.Name)
{
case "MyBackgroundTask":
{
var task = new MyBackgroundTask();
task.Run(args.TaskInstance);
} break;
};
deferral.Complete();
谢谢。
【问题讨论】:
-
没有足够的信息(或代码)来回答这个问题。您是否确认 OnBackgroundActivated 事件确实没有被触发?您可以添加一些日志记录或从那里弹出一个 toast 来测试它。
-
您是否在设置中允许该应用在后台运行?
-
您是否确认 OnBackgroundActivated 不会在后台情况下被调用(例如使用日志记录) - 并且您的代码不会只是崩溃或过早退出?例如,如果您的“IsApplicationClosed”不是您认为的那样,则代码会在尝试分派到 UI 线程时崩溃。此外,如果“UpdateDateStorage”是一个异步方法,那么您将在该方法有机会完成之前完成延迟并退出该过程。
-
问题是及时触发,有时被OnBackgroundActivated方法激活,有时没有。当我尝试从生命周期事件中的 Visual Studio 调试后台任务时,它在这两种情况下总是按预期工作。
标签: uwp uwp-xaml windows-community-toolkit