c# - 启动时运行后台任务

标签 c# windows-store-apps win-universal-app

当我在打开设备后立即登录时,我正在尝试运行我的后台任务。现在它仅在我已经登录并重新登录时运行。

调试的时候看到task注册的很完美,不知道为什么启动的时候还不行。

async void RequestBackgroundAccess()
{
    BackgroundAccessStatus backgroundStatus = await BackgroundExecutionManager.RequestAccessAsync();

    if (backgroundStatus != BackgroundAccessStatus.Denied && backgroundStatus != BackgroundAccessStatus.Unspecified)
    {
        RegisterBackgroundThread();
    }
    else
    {
        Debug.WriteLine("[Background Access] Denied.");
    }
}

void RegisterBackgroundThread()
{
    var taskRegistered = false;
    var exampleTaskName = "Bot";

    foreach (var bgTask in BackgroundTaskRegistration.AllTasks)
    {
        if (bgTask.Value.Name == exampleTaskName)
        {
            taskRegistered = true;
            Debug.WriteLine("[Background Task] Registered.");
            break;
        }
    }

    if (taskRegistered == false)
    {
        Debug.WriteLine("[Background Task] Registering...");

        var builder = new BackgroundTaskBuilder();

        builder.Name = exampleTaskName;
        builder.TaskEntryPoint = "Tasks.Bot";
        builder.SetTrigger(new SystemTrigger(SystemTriggerType.UserPresent, false));

        BackgroundTaskRegistration task = builder.Register();
        Debug.WriteLine("[Background Task] Registered.");
    }
}

机器人.cs

namespace Tasks
{
    public sealed class Bot : IBackgroundTask
    {
        BackgroundTaskDeferral serviceDeferral;

        public void Run(IBackgroundTaskInstance taskInstance)
        {
            this.serviceDeferral = taskInstance.GetDeferral();
            ToastNotification("Starting...");
        }

        void ToastNotification(String message)
        {
            XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText01);

            XmlNodeList stringElements = toastXml.GetElementsByTagName("text");
            stringElements[0].AppendChild(toastXml.CreateTextNode(message));

            ToastNotification toast = new ToastNotification(toastXml);
            ToastNotificationManager.CreateToastNotifier().Show(toast);
        }
    }
}

最佳答案

我注销后台任务并重新注册,它解决了我遇到的问题。

关于c# - 启动时运行后台任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35108010/

相关文章:

javascript - 如何使用 WinJS 一次保存多个文件?

c# - ms-windows-store ://- Broken Now? 处的 Windows 应用商店应用程序 URL

c# - 切换按钮两种方式绑定(bind)不起作用(通用 Windows 平台)

c# - 如何在 Windows Phone 8.1 中创建自定义动态磁贴?

windows-10 - 如何在 UWP 中添加 ListBox 项目上下文菜单

c# - 如何从标量值函数正确返回 count(*) 值

c# - 在加载应用程序目录之外的目录中加载依赖于其他程序集的程序集?

c# - FlipView 中的 DataTemplate 有 2 个 UserControl,一次一个

c# - 输出名称时,Azure Blob 名称包含子文件夹

c# - 如何将带有日期时间的时区解析为日期时间参数