gpt4 book ai didi

c# - 尝试使用 TimeTrigger 注册后台任务时,“Trigger”属性为 null

转载 作者:太空宇宙 更新时间:2023-11-03 12:58:15 25 4
gpt4 key购买 nike

我已遵循 Microsoft 指南创建和注册后台任务:https://msdn.microsoft.com/en-us/library/windows/apps/mt299100.aspx

我有我的主项目,它使用触发器等注册后台任务,还有另一个 Windows 运行时组件项目,它包含后台任务的代码,并被我的主项目引用。

我注册后台任务的代码是:

bool registered = false;
foreach (var task in BackgroundTaskRegistration.AllTasks)
{
if (task.Value.Name == "BackgroundGPS")
{
registered = true;
}
}

if (!registered)
{
var builder = new BackgroundTaskBuilder();

builder.Name = "BackgroundGPS";
builder.TaskEntryPoint = "BackgroundTasks.BackgroundGPSTask";

BackgroundExecutionManager.RemoveAccess();
var x = await BackgroundExecutionManager.RequestAccessAsync();
var trigger = new TimeTrigger(15, false);
builder.SetTrigger(trigger);

BackgroundTaskRegistration task = builder.Register();
//Here trigger property of 'task' is null.
}
}

我的后台任务从未运行,因为触发器似乎从未触发。我调试了代码,根据我的评论,BackgroundTaskRegistration 变量的 trigger 属性为空。

现在,我已经尝试使用 SystemTrigger 而不是 TimeTrigger 并且它有效,该属性不为空。我看到触发器属性被描述为“如果触发器类型不受支持则为空”。

为什么不支持 TimeTrigger?我已调用 RequestAccessAsync() 来获取锁屏访问权限,它会按允许返回。我还在主项目的应用程序 list 的“后台任务”声明的任务类型中添加了“计时器”。根据 Microsoft 的所有建议,TimeTrigger 是让后台任务在计时器上运行的唯一方法(MaintenanceTrigger 仅在插入电源时工作)。

关于这个有两个类似的SO问题:

Can't register a Time triggered Background Task

BackgroundTaskRegistration trigger property is null

其中一个没有任何答案,另一个我已经实现的建议。

有人能帮忙吗?

最佳答案

我认为这是一个文档问题。我这边的 backgroundtaskregistration 触发器属性也为 null,但时间触发器确实有效。

我不知道你是怎么测试的。但是进行以下测试将表明它确实有效。

  1. 手动卸载您的应用以避免任何意外行为。

  2. 使用非常简单的实现定义后台任务,如下所示。

    public sealed class BackgroundTask1 : IBackgroundTask
    {
    BackgroundTaskDeferral _deferral;

    public async void Run(IBackgroundTaskInstance taskInstance)
    {
    _deferral = taskInstance.GetDeferral();

    await ApplicationData.Current.LocalFolder.CreateFileAsync("test.txt"
    , CreationCollisionOption.ReplaceExisting);


    _deferral.Complete();
    }
    }
  3. 在 Visual Studio 中,开始调试您的应用。后台任务注册完成后,点击生命周期事件工具栏,选择后台任务,如下图。这将强制后台任务运行。借此机会检查是否有任何问题。 enter image description here

  4. 转到以下文件夹并检查是否可以看到 test.txt 文件存在。将 {User name} 替换为您登录的用户。在 Visual Studio 中,在设计器中打开项目的 package.appxmanifest,切换到 packaging 选项卡,最后一行是 {Package family name},将占位符替换为它。

C:\Users\{User name}\AppData\Local\Packages\{package family name}\LocalState

  1. 要在 visual studio 之外对其进行测试,只需等待 15 分钟并重复步骤 #4。

关于c# - 尝试使用 TimeTrigger 注册后台任务时,“Trigger”属性为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33175079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com