Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.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# 无法执行Windows phone 8.1后台任务';t注册后台任务_C#_Silverlight_Windows Phone 8.1_Background Task - Fatal编程技术网

C# 无法执行Windows phone 8.1后台任务';t注册后台任务

C# 无法执行Windows phone 8.1后台任务';t注册后台任务,c#,silverlight,windows-phone-8.1,background-task,C#,Silverlight,Windows Phone 8.1,Background Task,我刚从 并尝试运行windows phone 8.1项目。程序运行,但即使在我进行更改以触发事件时,也没有发生后台任务。我也不认为这是注册运行作为一个后台任务,因为我没有收到任何请求添加应用程序锁屏。我无法手动将应用程序添加到锁定屏幕。 注:使用Lumia 730搭配8.1牛仔布 我还尝试自己编写一个示例程序,使用silverlight 8.1和后台作为RT组件 if (BackgroundTaskRegistration.AllTasks.Any(task => task.Value.N

我刚从 并尝试运行windows phone 8.1项目。程序运行,但即使在我进行更改以触发事件时,也没有发生后台任务。我也不认为这是注册运行作为一个后台任务,因为我没有收到任何请求添加应用程序锁屏。我无法手动将应用程序添加到锁定屏幕。 注:使用Lumia 730搭配8.1牛仔布

我还尝试自己编写一个示例程序,使用silverlight 8.1和后台作为RT组件

if (BackgroundTaskRegistration.AllTasks.Any(task => task.Value.Name == name))
            {
                // One register it once
                return;
            }
    var builder = new BackgroundTaskBuilder();
                var trigger = new SystemTrigger(SystemTriggerType.UserAway, false);
                builder.Name = name;
                builder.TaskEntryPoint = typeof(MyBackgroundTask.BackClass).FullName;                   builder.SetTrigger(trigger);

                await BackgroundExecutionManager.RequestAccessAsync();
                BackgroundTaskRegistration registration = builder.Register();
                registration.Completed += RegistrationOnCompleted;
这里也有例外

        BackgroundTaskRegistration registration = builder.Register();
例外情况是运行时状态

> A first chance exception of type 'System.Exception' occurred in
> Project1.DLL

你没有提到例外情况是什么,也没有提到例外情况的文本是什么。这使得很难回答

然而,假设您的错误为“未注册类”,则需要执行以下几项操作:

  • 确保
    MyBackgroundTask.BackClass
    是Windows运行时组件项目中的类(它不能在Silverlight项目中)
  • 确保引用该项目(如果不引用,将出现编译器错误)
  • 确保在Package.appxmanifest设计器的声明选项卡上正确添加了后台任务条目。再次将类名用作入口点

  • 我试着在我的背景任务中添加BackgroundTaskDelay,它开始工作了。我想知道为什么,因为这只是异步调用。不管怎么说,这对我很有效。
    感谢您的帮助

    我找到了此问题的解决方案:

  • 为后台任务生成运行时Windows Phone 8.1项目
  • 在您的后台任务项目中注册任务时:

    public async static void Register()
    {
        Debug.WriteLine("Registering geofence bg task");
        if (!IsTaskRegistered())
        {
            var result = await BackgroundExecutionManager.RequestAccessAsync();
            var builder = new BackgroundTaskBuilder();
    
            builder.Name = TaskName;
            builder.TaskEntryPoint = typeof(BackgroundTask.YourTaskName).FullName;
            builder.SetTrigger(new LocationTrigger(LocationTriggerType.Geofence));
            try
            {
                builder.Register();
                Debug.WriteLine("GeoFence Task Registered");
            }
            catch (Exception ex)
            {
                Debug.WriteLine("GeoFence Task Failed : " + ex.Message.ToString());
            }
    
    
    
        }
        else { }
    
    }
    
  • 请确保通过将TaskEntryPoint引用到后台项目名称来正确添加TaskEntryPoint,它看起来像:“BackgroundTask.YourTaskName”

  • 生成器的TaskName字符串。Name参数应如下所示:

    静态字符串TaskName=“BackgroundTask.YourTaskName”

  • 在appmanifest的声明选项卡下声明TaskEntryPoint,这里我使用GeofenceTask,所以我选中了任务所需的几个复选框:

  • 在这里,您再次输入EntryPoint(类似于TaskEntryPoint):“BackgroundTask.YourTaskName”

  • 当您在应用程序中的某个位置初始化任务时,您可以使用:

    BackgroundTask.YourTaskName.Register()

  • 这都是关于任务的入口点。所以,如果您的任务在单独的项目下,就像它应该完成的一样,那么您必须输入该项目的名称及其下的后台任务类的名称

    不要仅为入口点使用后台任务类名称,必须使用包含该类的项目名称引用它


    希望能有帮助,同样的问题。原来Package.appxmanifest中的入口点参数拼写为“Module:EntryPoint”,而不是“Module.EntryPoint”。将冒号改为句号是我唯一要做的事。

    对此表示抱歉。但是我相信手机设置有一些问题,因为我能够在模拟器中测试程序,并且工作正常。仍然想知道如何在我的手机中运行应用程序如果你向下钻取或查看输出窗口,异常中是否没有更多信息?通常会有更详细的描述。你有没有把节电器打开?已经安装了很多后台任务吗?你试过别的电话吗?