在 Windows Phone 8.1 中使用 BackgroundExecutionManager.RequestAccessAsync 时未注册类(来自 HRESULT 的异常:0x80040154)

asi*_*tis 2 c# windows-phone-8 windows-phone-8.1

我正在尝试在我的项目中实施后台任务。所以我添加了一个Windows Runtime Component Project并从我的 main 中引用了它Windows Phone 8.1 silverlight project。但是当我调用下面的函数时,我得到了一个异常

“在 mscorlib.ni.dll 中发生了“System.Exception”类型的第一次机会异常。附加信息:未注册类(来自 HRESULT 的异常:0x80040154 (REGDB_E_CLASSNOTREG))”

        // Applications must have lock screen privileges in order to receive raw notifications
        BackgroundAccessStatus backgroundStatus = await BackgroundExecutionManager.RequestAccessAsync();

        // Make sure the user allowed privileges
        if (backgroundStatus != BackgroundAccessStatus.Denied && backgroundStatus != BackgroundAccessStatus.Unspecified)
        {
            OpenChannelAndRegisterTask();
        }
        else
        {
            // This event comes back in a background thread, so we need to move to the UI thread to access any UI elements
            Dispatcher.BeginInvoke(() =>
            {
                Debug.WriteLine("Lock screen access is denied");
            });
        }
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况?后来我创建了一个示例 Windows 手机项目,上面的代码工作正常。这个奇怪的问题的原因是什么?

如果您有任何线索,请帮助我解决此问题。

Hei*_*cht 5

后台任务必须在 Package.appxmanifest使用它们的类名。

双击您的appxmanifest文件,进入声明并确保您已经 a) 在那里声明了后台任务,并且 b) 它NamespaceName.BackgroundTaskClassNameEntry point输入了更正的类名(如)。

RequestAccessAsync 因为我忘记注册我的后台任务,所以我失败了,你得到的错误消息完全相同。

(针对 Windows 10 而不是 8(.1) 的读者请注意:Frank Sposaro 的回答不再适用于 Windows 10,因为他提供了正确的MSDN 链接文档。)