【问题标题】:How do I make my Backgroundtask start on Startup?如何让我的 Backgroundtask 在启动时启动?
【发布时间】:2018-12-02 17:17:58
【问题描述】:

我有一个后台任务,该任务当前在我的应用程序启动且当前未运行时启动。但如果可能的话,我希望它也能在启动时启动。我查看了触发器,似乎没有一个可以让它在启动时启动。根据MSDN,有一种方法可以制作启动任务,但他们没有说明如何将我当前的任务转换为启动任务。有没有可能:

<uap5:Extension Category="windows.startupTask">
  <uap5:StartupTask
    TaskId="MyStartupId"
    Enabled="true"
    DisplayName="Background-Keyboard task" />
</uap5:Extension> //Documentation

<Extension Category="windows.backgroundTasks" EntryPoint="Background.BackgroundTask">
  <BackgroundTasks>
    <Task Type="systemEvent" />
  </BackgroundTasks>
</Extension> //My task

我目前这样开始我的任务:

var builder = new BackgroundTaskBuilder();

builder.Name = exampleTaskName;
builder.TaskEntryPoint = "Background.BackgroundTask";

ApplicationTrigger _AppTrigger = new ApplicationTrigger();
builder.SetTrigger(_AppTrigger);


builder.Register();

await _AppTrigger.RequestAsync();

编辑:我想要这个的原因:

我的应用提供了可以打开和关闭的后台服务。它应该一直在运行,并且在我打开应用程序后确实有效。但是每次重新启动设备时都不需要打开它 - 目前就是这种情况,我想添加让后台服务在启动时启动的可能性。理想情况下,我还想保持当前的启动方式 - 通过_AppTrigger.RequestAsync();,所以我的启用/禁用滑块继续工作。

【问题讨论】:

  • @HansPassant 任务是否仅在尚未运行时触发?例如,如果我让一台电脑休眠,任务将在我唤醒它后继续运行。那么这不算作 SessionConnected 吗?
  • @HansPassant 让我无法使用当前的触发器
  • StartupTask 类用于将您的应用配置为在登录时启动。请描述一下你的实际使用场景,看看你是否真的需要使用StartupTask
  • @XavierXie-MSFT 我更新了我的帖子来解释我的使用场景。
  • 后台任务由单独的进程 (backgroundtaskhost.exe) 控制,而不是您的应用程序。它并不总是在运行。它只有在满足某些条件或触发触发器时才会开始执行。

标签: c# uwp desktop-bridge


【解决方案1】:

正如一些 cmets 已经指出的那样,您应该使用 TriggerType=SessionConnected 的 SystemTrigger 在用户登录时启动任务。您仍然可以在需要时使用 ApplicationTrigger 从前台应用程序触发任务。您可以拥有两个或多个具有相同入口点的触发器,从而触发相同的任务实现。事实上,为了使这个场景完整,您还想添加一个 SystemTriggerType=PowerChanged 触发器来覆盖电源/睡眠状态更改。

【讨论】:

  • 好的,但是我确实需要注册一个新任务,因为每个任务只能有一个触发器,对吗?另外,来自较早的评论:任务是否仅在尚未运行时触发?例如,如果我让一台电脑休眠,任务将在我唤醒它后继续运行。那么这不算作 SessionConnected 吗?
  • 是的,您需要为每个触发器注册它们,但它们可以具有相同的入口点。只要它们各自的条件为真,触发器就会触发。如果任务已经在运行,如果您想确保一次只运行一个实例,您将需要在代码中使用某种单例模式来管理这种情况。
  • 回答从休眠中唤醒的问题:您还想触发 SystemTriggerType=PowerChange 来处理这种情况。我已经为您在这里尝试做的事情构建了一个示例,但从未有时间发布它。我会看看我是否可以尽快清理它并在这里分享它,但是有了这里提供的信息,你应该可以开始了。
猜你喜欢
  • 1970-01-01
  • 2013-12-13
  • 2015-08-07
  • 1970-01-01
  • 1970-01-01
  • 2022-06-14
  • 2019-10-09
  • 2011-11-28
  • 1970-01-01
相关资源
最近更新 更多