Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.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#_Uwp_Background Process - Fatal编程技术网

C# 后台任务不起作用

C# 后台任务不起作用,c#,uwp,background-process,C#,Uwp,Background Process,我不太确定以前是否有人问过这个问题,但我在谷歌上搜索过,但没有发现什么问题。我有两个应用程序提交到商店,他们都有几乎相同的背景任务,特别是每个2个任务 我注册后台任务,当应用程序启动时,如果应用程序得到更新,我会检查应用程序版本,并按照Microsoft文档中针对进程外后台任务的UWP应用程序所述进行适当操作 以前后台任务工作正常,但到现在为止的几天里,我在系统中没有看到任何与后台任务相关的活动。我检查了事件查看器,发现根据应用程序中定义的触发器,后台任务确实“尝试启动”,但当任务因异常而终止并

我不太确定以前是否有人问过这个问题,但我在谷歌上搜索过,但没有发现什么问题。我有两个应用程序提交到商店,他们都有几乎相同的背景任务,特别是每个2个任务

我注册后台任务,当应用程序启动时,如果应用程序得到更新,我会检查应用程序版本,并按照Microsoft文档中针对进程外后台任务的UWP应用程序所述进行适当操作

以前后台任务工作正常,但到现在为止的几天里,我在系统中没有看到任何与后台任务相关的活动。我检查了事件查看器,发现根据应用程序中定义的触发器,后台任务确实“尝试启动”,但当任务因异常而终止并且从未实际运行时,系统会出现一些问题

请注意,在调试过程中,我肯定可以毫无问题地运行后台任务,但这些任务在自己启动时不会运行

以下是事件查看器最新日志的屏幕截图:

WFW电影和电视的任务1

WFW电影和电视的任务2

动漫契约任务1

动漫契约的任务2

我用于注册任务的代码:

private static async void BackgroundTasksRegistrationProcedure()
    {
        string curVer = DataHelper.GetAppVersion();
        TimeTrigger timeTrigger = new TimeTrigger(15, false);
        SystemCondition internetCondition = new SystemCondition(SystemConditionType.InternetAvailable);
        bool doRegister = false;
        var status1 = await BackgroundExecutionManager.RequestAccessAsync();
        switch (status1)
        {
            case BackgroundAccessStatus.DeniedByUser:
                {
                    doRegister = false;
                    break;
                }

            case BackgroundAccessStatus.AllowedSubjectToSystemPolicy:
                {
                    doRegister = true;
                    break;
                }

            case BackgroundAccessStatus.AlwaysAllowed:
                {
                    doRegister = true;
                    break;
                }

            default:
                break;
        }
        var versionKey = "app_version";
        if (!DataHelper.LocalDataContainer.Values.ContainsKey(versionKey))
        {
            DataHelper.LocalDataContainer.Values[versionKey] = curVer;
            // run tasks registration here
            if (doRegister)
            {
                RegisterBackgroundTask(EpisodeUpdateTaskEntryPoint, EpisodeUpdateTaskName, new TimeTrigger(120, false), internetCondition);
                RegisterBackgroundTask(TileUpdateTaskEntryPoint, TileUpdateTaskName, timeTrigger, internetCondition);
            }
        }
        else
        {
            // compare app version
            if (DataHelper.LocalDataContainer.Values[versionKey].ToString() == curVer)
            {
                // run tasks registration here
                if (doRegister)
                {
                    RegisterBackgroundTask(EpisodeUpdateTaskEntryPoint, EpisodeUpdateTaskName, new TimeTrigger(120, false), internetCondition);
                    RegisterBackgroundTask(TileUpdateTaskEntryPoint, TileUpdateTaskName, timeTrigger, internetCondition);
                }
            }
            else
            {
                DataHelper.LocalDataContainer.Values[versionKey] = curVer;
                // remove task registrations
                BackgroundExecutionManager.RemoveAccess();
                // run tasks registrations
                await BackgroundExecutionManager.RequestAccessAsync();
                if (doRegister)
                {
                    RegisterBackgroundTask(EpisodeUpdateTaskEntryPoint, EpisodeUpdateTaskName, new TimeTrigger(120, false), internetCondition);
                    RegisterBackgroundTask(TileUpdateTaskEntryPoint, TileUpdateTaskName, timeTrigger, internetCondition);
                }
            }
        }
    }

    public static BackgroundTaskRegistration RegisterBackgroundTask(string taskEntryPoint, string name, IBackgroundTrigger trigger, IBackgroundCondition condition)
    {
        // We'll add code to this function in subsequent steps.
        foreach (var cur in BackgroundTaskRegistration.AllTasks)
        {
            if (cur.Value.Name == name)
            {
                //
                // The task is already registered.
                //
                return (BackgroundTaskRegistration)(cur.Value);
            }
        }
        var builder = new BackgroundTaskBuilder()
        {
            Name = name
        };
        // in-process background tasks don't set TaskEntryPoint
        if (taskEntryPoint != null && taskEntryPoint != string.Empty)
        {
            builder.TaskEntryPoint = taskEntryPoint;
        }
        builder.SetTrigger(trigger);
        if (condition != null)
        {
            builder.AddCondition(condition);
        }
        BackgroundTaskRegistration task = builder.Register();
        return task;
    }
请帮助我理解为什么会发生这种情况。我可以成功调试任务,但当应用程序未运行时,它们不会自行运行。谢谢

更新:

我发现另一个与
BackgroundTaskHost.exe相关的错误

Faulting application name: backgroundTaskHost.exe, version: 10.0.15063.0, time stamp: 0x9ad06afb
Faulting module name: CoreCLR.dll, version: 4.6.25129.1, time stamp: 0x58dc3e7d
Exception code: 0xc0000005
Fault offset: 0x0014101d
Faulting process ID: 0x18bc
Faulting application start time: 0x01d2d953c94d6e41
Faulting application path: C:\Windows\syswow64\backgroundTaskHost.exe
Faulting module path: C:\Program Files\WindowsApps\Microsoft.NET.CoreRuntime.1.1_1.1.25129.1_x86__8wekyb3d8bbwe\CoreCLR.dll
Report ID: 8a3a3035-d95b-49bb-a106-d645c604c39b
Faulting package full name: 51918AhmarAftab.WFWMoviesTV_1.3.442.0_x86__rm40d0p5knk1c
Faulting package-relative application ID: App

考虑到故障在
.Net.corereruntime

中,我认为这是windows的问题。您的意思是后台任务可以工作几天,突然停止工作,然后再也不工作了吗?您能找到上面提到的操作日志吗?您的设备是否保持与internet的连接?如果方便的话,请尝试删除“internetCondition”,然后再测试几天,看看它是否仍然可以复制。我删除了internet条件,但问题仍然存在,我找到了更多信息并相应地更新了问题。