类未注册(异常来自HRESULT: 0x80040154).Windows Phone 8.1中的RequestAcce

本文关键字:Phone Windows RequestAcce 中的 0x80040154 注册 异常 HRESULT | 更新日期: 2023-09-27 18:12:59

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

"类型为'System '的第一次异常。发生的异常mscorlib.ni.dll。附加信息:班级未注册(异常from HRESULT: 0x80040154 (regdbe_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");
            });
        }

为什么会这样?后来我创建了一个示例Windows phone项目,上面的代码运行良好。这个奇怪的问题的原因是什么?

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

类未注册(异常来自HRESULT: 0x80040154).Windows Phone 8.1中的RequestAcce

后台任务必须使用它们的类名在Package.appxmanifest中注册("声明")。

双击你的appxmanifest文件,得到声明,并确保你有a)声明后台任务,b)它有正确的类名(如NamespaceName.BackgroundTaskClassName)在入口点下输入。

RequestAccessAsync对我来说失败了与你得到的完全相同的错误信息,因为我忘记注册我的后台任务。

(对于那些瞄准Windows 10而不是8(1)的读者:Frank Sposaro的答案不再适用于Windows 10,因为他提供了正确的MSDN链接文档)

根据MSDN,您应该从UI线程运行RequestAccessAsync。您可能希望确保是这种情况,如果需要,可以使用Dispatch。我看到它抛出了各种各样的异常,也许regdbe_classnotreg是其中之一。