Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通用应用程序未处理的异常(KERNELBASE.DLL)_C#_Exception_Windows Phone 8.1_Windows 8.1_Win Universal App - Fatal编程技术网

C# 通用应用程序未处理的异常(KERNELBASE.DLL)

C# 通用应用程序未处理的异常(KERNELBASE.DLL),c#,exception,windows-phone-8.1,windows-8.1,win-universal-app,C#,Exception,Windows Phone 8.1,Windows 8.1,Win Universal App,晚上好, 我正在开发一个通用应用程序。在几次随机崩溃和调试本机代码之后,我发现本机异常是:“AssemblyName.UniversalApp.WindowsPhone.exe中0x777E35D7(KERNELBASE.DLL)处未处理的异常:0xC0000002:请求的操作未实现。” 下面是反汇编中的异常。条目777E35D7丢失,这是应用程序崩溃的地方 RaiseException: 777E35A0 push {r11,lr} 777E35A4 mov

晚上好,

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

  • 我使用此库的自定义版本升级以使用通用应用程序: . 我必须提到的是,控制工作良好

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

  • 我还需要指定异常只发生在设备上,在应用程序正常工作的所有模拟器上。此外,我是“开发者预览”计划的成员,因此我的Windows Phone版本(8.10.14203.306)可能会影响应用程序(不幸的是,目前我没有任何其他设备需要测试)

  • 我的问题是:有没有一种方法来处理这个异常,或者找出哪些没有实现

    谢谢你的回答

    问候,,
    Ionut

    正如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

    那么库不会抛出任何NotImplementedException。在VisualStudio中,如果您对NotImplementedException快速执行CTRL+SHIFT+F,则实际上没有结果?@Pierre Lucpinoult否,库是干净的。此外,它不是托管异常(库是源代码的一部分)。如果它被管理,我将在“UnhandledException”或“UnobservedTaskException”事件中捕获异常。我必须在非托管代码(KERNELBASE.DLL)中捕获异常;所以,请澄清:在selection changed事件处理程序中,您正在导航到另一个页面,这就是导致问题的原因?如果是这种情况,您是否可以尝试将页面导航排入调度程序的队列?(也就是说,调用它就像在UI线程中没有调用事件处理程序一样。)@yasen感谢您的建议!我不敢相信我没有想到UI线程的问题。在WindowsPhone8中,我总是使用Dispatcher在UI线程上执行代码。所以它现在起作用了!8.1 Dispatcher(用于导航)的代码是
    wait Dispatcher.RunAsync(CoreDispatcherPriority.Normal,()=>{if(!Window.Current.Content as Frame).Navigate(typeof(ItemPage)){抛出新异常(“NavigationFailedExceptionMessage”);}                 });。再次感谢你,亚森!我很高兴它解决了你的问题!:)我建议这样做是因为我只在与UI线程访问相关的错误中遇到过KERNELBASE.DLL。奇怪的是,在所有这些情况下,代码无论如何都应该在UI线程上运行,而且应该没有错误。似乎是WP8.1中的一个bug。编辑:如果你有时间的话,把这个问题的答案贴出来就好了。哦,上帝,谢谢。在进行导航之前,我就有了这个0xC0000002,但这只发生在开发者的WindowsPhone8.1预览版中,所以我花了很多天找到了解决方案。谢谢