gpt4 book ai didi

c# - 通用应用未处理异常 (KERNELBASE.DLL)

转载 作者:太空宇宙 更新时间:2023-11-03 23:47:48 25 4
gpt4 key购买 nike

晚上好

我正在开发一个通用应用程序。在几次随机崩溃和调试 native 代码后,我发现 native 异常是:“AssemblyName.UniversalApp.WindowsPhone.exe 中 0x777E35D7 (KERNELBASE.DLL) 处未处理的异常:0xC0000002:请求的操作未实现。”

下面是反汇编中的异常。缺少条目 777E35D7,这是应用程序崩溃的地方。

RaiseException:
777E35A0 push {r11,lr}
777E35A4 mov r11,sp
777E35A6 bl __security_push_cookie (777CC868h)
777E35AA sub sp,sp,#0x54
777E35AC and r1,r1,#1
777E35B0 str r1,[sp,#4]
777E35B2 movs r1,#0
777E35B4 str r1,[sp,#8]
777E35B6 ldr r1,RaiseException+50h (777E35F0h)
777E35B8 str r0,[sp]
777E35BA str r1,[sp,#0xC]
777E35BC cbz r3,RaiseException+40h (777E35E0h)
777E35BE cmp r2,#0xF
777E35C0 bhi RaiseException+46h (777E35E6h)
777E35C2 str r2,[sp,#0x10]
777E35C4 lsls r2,r2,#2
777E35C6 add r0,sp,#0x14
777E35C8 mov r1,r3
777E35CA bl memcpy (7781ECC4h)
777E35CE ldr r3,RaiseException+4Ch (777E35ECh)
777E35D0 mov r0,sp
777E35D2 ldr r3,[r3]
777E35D4 blx r3
777E35D6 add sp,sp,#0x54
777E35D8 bl __security_pop_cookie (777CC880h)
777E35DC pop {r11,pc}
777E35E0 movs r3,#0
777E35E2 str r3,[sp,#0x10]
777E35E4 b RaiseException+2Eh (777E35CEh)
777E35E6 movs r2,#0xF
777E35E8 b RaiseException+22h (777E35C2h)
777E35EA __debugbreak
777E35EC ?? ??
777E35EE strb r6,[r0,#0x1E]
777E35F0 adds r5,r5,#0xA1
777E35F2 strb r6,[r7,#0x1D]

产生此异常的原因:

  1. 我使用此库的自定义版本升级后可与通用应用程序一起使用: https://github.com/brendankowitz/ZeroProximity.Accordion .我不得不提一下,该控件工作正常。

  2. Accordion 项目内部是一个控件模板,其中包含一个带有动态绑定(bind)事件 (SelectedItemChanged) 的列表框。随机地,当点击 ListItem 时,应用程序会引发此异常。事件背后的代码将应用程序导航到另一个页面。我需要指定该事件在没有导航部分的情况下仍然有效,并且应用程序不会崩溃。

  3. 我还需要指定异常仅发生在设备上,应用程序在所有模拟器上都能完美运行。另外,我是“Developer Preview”计划的成员,所以我的 Windows Phone 版本 (8.10.14203.306) 可能会影响应用程序(不幸的是,目前,我没有任何其他设备可以测试)。

我的问题是:有没有办法处理这个异常,或者找出到底是什么没有实现?

感谢您的回答!

问候,爱诺特

最佳答案

正如 Yasen 在我上一篇文章的评论中所说,Windows Phone 8.1 中的导航代码应该(默认情况下)在 UI 线程上运行。

不幸的是(我仍在尝试找出原因)ListBoxItem 事件处理程序中的导航代码并非始终在 UI 线程下运行,因此随机抛出“ native 代码”异常。奇怪的是,抛出的异常没有给出任何关于 UI 线程的信息(就像我们在 Windows Phone 8.0 Silverlight 上收到的那样),但是 Yasen 指出 KERNELBASE.DLL 错误与 UI 线程访问异常密切相关(以后知道是好事)引用)。

解决方案是使用 Windows Runtime Dispatcher。您可以在下方找到有效的最终导航代码。

await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
if ((!Window.Current.Content as Frame).Navigate(typeof(ItemPage)))
{
throw new Exception("NavigationFailedExceptionMessage");
}
});

再次感谢亚森!您刚刚节省了大量的调试时间!

问候,爱诺特

关于c# - 通用应用未处理异常 (KERNELBASE.DLL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27024957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com