Universal App未处理的异常(KERNELBASE.DLL)

时间:2014-11-19 19:08:25

标签: c# exception windows-phone-8.1 windows-8.1 win-universal-app

晚上好,

我正在开发通用应用程序。在几次随机崩溃和调试本机代码后,我发现原生异常是:" 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]  

产生此异常的原因是什么:

  1. 我使用此库的自定义版本升级以使用Universal Apps: https://github.com/brendankowitz/ZeroProximity.Accordion。我必须提到控件工作正常。

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

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

  4. 我的问题是:有没有办法处理这个异常,或者找出究竟没有实现的内容?

    感谢您的回答!

    此致 约努茨

1 个答案:

答案 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