【问题标题】:In process background tasks in UWPUWP 中的进程中后台任务
【发布时间】: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


【解决方案1】:

我认为因为您使用的是进程内后台任务,所以后台任务和您的应用程序在同一进程上运行,因此当您关闭应用程序时,后台任务将关闭,如果您使用进程外后台任务可能解决此问题,此链接可帮助您构建进程外后台任务: https://docs.microsoft.com/en-us/windows/uwp/launch-resume/create-and-register-a-background-task

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 2018-12-07
    • 2016-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多