晚上好,
我正在开发通用应用程序。在几次随机崩溃和调试本机代码后,我发现原生异常是:" AssemblyName.UniversalApp.WindowsPhone.exe中的0x777E35D7(KERNELBASE.DLL)处的未处理异常:0xC0000002:未实现请求的操作。 #34;
以下是反汇编中的例外情况。缺少条目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]
产生此异常的原因是什么:
我使用此库的自定义版本升级以使用Universal Apps: https://github.com/brendankowitz/ZeroProximity.Accordion。我必须提到控件工作正常。
Accordion Item内部是一个控件模板,其中包含一个带有动态绑定事件的ListBox(SelectedItemChanged)。随机地,当点击ListItem时,应用程序引发此异常。事件背后的代码将应用程序导航到另一个页面。我需要指定事件在没有导航部分的情况下工作,并且应用程序不会崩溃。
我还需要指定只在设备上发生异常,在所有模拟器上应用程序完美运行。此外,我是" Developer Preview"的成员。程序,所以我的Windows Phone版本(8.10.14203.306)可能会影响应用程序(不幸的是,目前,我还没有其他任何设备可以测试)。
我的问题是:有没有办法处理这个异常,或者找出究竟没有实现的内容?
感谢您的回答!
此致 约努茨
答案 0 :(得分:3)
由于Yasen对我上一篇文章的评论过度了,Windows Phone 8.1中的导航代码应该在UI线程上运行(默认情况下)。
不幸的是(我还在试图找出原因)ListBoxItem事件处理程序中的导航代码并没有一直在UI线程下运行,所以"本机代码"异常随机抛出。奇怪的是,抛出的异常并未提供有关UI线程的任何信息(就像我们在Windows Phone 8.0 Silverlight上收到的那样),但是Yasen指出KERNELBASE.DLL错误与UI线程访问异常密切相关(很高兴知道未来参考文献)。
解决方案是使用Windows运行时调度程序。您可以在下面找到最终导航代码。
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
if ((!Window.Current.Content as Frame).Navigate(typeof(ItemPage)))
{
throw new Exception("NavigationFailedExceptionMessage");
}
});
再次感谢你,亚森!你刚刚节省了大量的调试时间!
此致 Ionut