Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 启动时运行后台任务_C#_Windows Store Apps_Win Universal App - Fatal编程技术网

C# 启动时运行后台任务

C# 启动时运行后台任务,c#,windows-store-apps,win-universal-app,C#,Windows Store Apps,Win Universal App,当我打开设备后立即登录到设备时,我正在尝试运行后台任务。现在它只在我已经登录并重新登录时运行 我可以看到任务在调试时被完美注册,但仍然不知道为什么它在启动时不工作 async void RequestBackgroundAccess() { BackgroundAccessStatus backgroundStatus = await BackgroundExecutionManager.RequestAccessAsync(); if (backgroundStatus !=

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

我可以看到任务在调试时被完美注册,但仍然不知道为什么它在启动时不工作

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.");
    }
}
Bot.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);
        }
    }
}

请参考这个问题。。我相信它与你的关系如此密切:


祝你好运

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

如果向任务生成器添加条件,会得到相同的结果吗<代码>builder.AddCondition(新的SystemCondition(SystemConditionType.SessionConnected))@Chase Nope也不起作用:(只是检查一下:
Tasks.Bot
是否是你的任务承载后台进程的完全限定名?@Chase yup,是的。当我重新登录时效果很好。谢谢。好的,还有两件事需要确认。1)你是否调用了你的
RequestBackgroundAccess()
注册表BackgroundThread()之前的方法?2) 您的
任务.Bot
类是否已封存?谢谢,这与我的情况相同。昨天我注销了后台任务,重新注册,解决了问题!没有代码更改。我很高兴你的问题解决了,如果你看到我的答案是100%准确的,请接受:)这并不是问题的答案,只是另一个问题的链接。当您发布答案时,请在此处发布答案,并附上指向来源的链接,以方便他人。