首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows phone 8.1后台任务无法注册后台任务

Windows phone 8.1后台任务无法注册后台任务
EN

Stack Overflow用户
提问于 2015-02-12 09:02:14
回答 4查看 2.1K关注 0票数 1

我刚刚从https://code.msdn.microsoft.com/windowsapps/Background-Task-Sample-9209ade9下载了示例,并尝试运行windows phone 8.1项目。程序会运行,但即使我进行了更改以触发事件,也没有后台任务发生。我也不认为它被注册为后台任务运行,因为我没有收到任何请求,以添加应用程序到锁屏。而且我无法手动将应用程序添加到锁屏。注:使用Lumia 730和8.1 Denim。

我还尝试用silverlight 8.1编写了一个示例程序,并将后台作为RT组件。

代码语言:javascript
复制
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;

在这里,我也收到了一个异常

代码语言:javascript
复制
        BackgroundTaskRegistration registration = builder.Register();

例外是运行时,它声明

代码语言:javascript
复制
> A first chance exception of type 'System.Exception' occurred in
> Project1.DLL
EN

回答 4

Stack Overflow用户

发布于 2015-03-11 20:53:19

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

  1. 为后台任务

生成运行时Windows Phone 8.1项目

在您的后台任务项目中注册任务时的

公共异步静态无效寄存器(){Debug.WriteLine(“注册geofence bg任务”);if (!IsTaskRegistered()) { var LocationTrigger(LocationTriggerType.Geofence));=等待类型var builder =新类型();builder.Name = TaskName;builder.TaskEntryPoint =LocationTrigger(LocationTriggerType.Geofence));(BackgroundTask.YourTaskName).FullName;builder.SetTrigger(新类型尝试{ builder.Register();Debug.WriteLine("GeoFence任务已注册“);} catch (Exception ex) { Debug.WriteLine("GeoFence任务失败:”+ ex.Message.ToString());}} else {} }

确保通过将其引用到后台项目名称来正确添加TaskEntryPoint,它看起来像这样:"BackgroundTask.YourTaskName“

builder.Name参数的

  1. TaskName字符串应如下所示:

静态字符串TaskName = "BackgroundTask.YourTaskName";

  • Declare您的TaskEntryPoint在声明选项卡下的应用程序清单中,这里我使用GeofenceTask,所以我选中了任务所需的几个复选框:

在这里再次输入EntryPoint(类似于TaskEntryPoint):"BackgroundTask.YourTaskName“

  1. 当你在应用程序中的某个地方初始化任务时,你可以使用:

BackgroundTask.YourTaskName.Register();

这一切都是关于任务的入口点。因此,如果您的任务位于单独的项目下,则必须输入该项目的名称和该项目下的后台任务类的名称。

不要只对EntryPoint使用后台任务类名称,必须使用包含该类的项目名称来引用它。

希望能有所帮助,

票数 2
EN

Stack Overflow用户

发布于 2015-02-12 14:35:50

您没有提到异常是什么,也没有提到伴随它的文本是什么。这使得它很难回答。

然而,假设你的错误是“类未注册”,你需要做几件事:

  1. 确保MyBackgroundTask.BackClass是Windows运行时组件项目中的一个类(它不能在您的Silverlight项目中)
  2. 确保您引用了该项目(否则将收到编译器错误)
  3. 确保您已在Package.appxmanifest designer的声明选项卡上正确添加了后台任务项。再次使用类名作为条目point
票数 1
EN

Stack Overflow用户

发布于 2015-02-21 22:45:37

我尝试在我的后台任务中添加BackgroundTaskDeferral,它开始工作了。我想知道为什么,因为这只是一个异步呼叫。无论如何,它对我来说是有效的。谢谢你的帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28467496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档