我正在尝试在我的项目中实现后台任务。所以我添加了Windows Runtime Component Project
并从我的主Windows Phone 8.1 silverlight project
中引用了它。但是当我调用下面的函数时,我得到了一个异常
"类型' System.Exception'的第一次机会异常发生在 mscorlib.ni.dll。附加信息:未注册的课程 (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");
});
}
为什么会这样?后来我创建了一个示例Windows手机项目,上面的代码工作正常。这个奇怪的问题会是什么原因?
如果您对此有任何疑问,请帮我解决此问题。
答案 0 :(得分:3)
后台任务必须使用他们的班级名称在Package.appxmanifest
中注册(“声明”)。
双击你的appxmanifest
文件,进入声明并确保你有a)在那里声明后台任务b)它有更正的类名(如{{1} })在入口点下输入。
NamespaceName.BackgroundTaskClassName
失败了,因为我忘了注册我的后台任务而收到完全相同的错误消息。
(对于针对Windows 10而非8(.1)的读者而言:Frank Sposaro的答案不再适用于Windows 10,因为MSDN link他提供了正确的文档。)
答案 1 :(得分:2)
根据MSDN,您应该从UI线程运行RequestAccessAsync。您可能希望确保这种情况,如果需要,也许可以使用Dispatch。我已经看到它抛出了各种异常,也许REGDB_E_CLASSNOTREG就是其中之一。