来自System.Windows.Forms的AccessViolationException,在WPF中使用WinFormsHost
在开发WPF / WinForms互操作应用程序时,我遇到了一个令人讨厌的问题。我一直试图解决这个问题三天,但我无法取得任何进展。我怀疑我能提供足够的信息来获得解决方案,但我正在寻找能够解释这里究竟发生了什么的人吗?
我正在使用的组件是AxMapControl(ESRI ArcGIS Engine 9.3.1 SP2),据我所知,它是COM包装的本机代码,公开为WinForms控件。该组件使用WPF WinFormsHost代理嵌入在我们的WPF(.NET 3.5)客户端软件中。
应用程序会定期使用
AccessViolationException
进行严重崩溃。这总是发生在用户鼠标点击地图控件时,但似乎没有任何押韵或原因在什么具体输入。堆栈跟踪始终相同:
System.AccessViolationException:尝试读取或写入受保护的内存。这通常表明其他内存已损坏。
在System.Windows.Forms.UnsafeNativeMethods.CallWindowProc(IntPtr wndProc,IntPtr hWnd,Int32 msg,IntPtr wParam,IntPtr lParam)
在System.Windows.Forms.NativeWindow.DefWndProc(消息& m)
在System.Windows.Forms.Control.DefWndProc(消息& m)
在System.Windows.Forms.AxHost.WndProc(消息& m)
在System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
在System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
在System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd,Int32 msg,IntPtr wparam,IntPtr lparam)
因为异常似乎抛出了我的代码启动的任何调用堆栈之外,我无法弄清楚如何捕获异常并以编程方式处理它。
此问题发生在调试模式以及发布版本中。但它确实不会出现在所有计算机上,但我能够在Windows 7和XP以及.NET framework 3.5和4.0上复制此问题。
检查崩溃发生时的过程是什么,异常似乎是在GAC部署的DLL上似乎有多个CreateFileMapping
操作失败,结果为FILE LOCKED WITH ONLY READERS
。
此视图已被过滤以仅显示该类型的结果,但似乎每个DLL恰好发生两次。这是什么意思吗?
现在,很明显我对发生的事情毫无头绪,以及如何解决这个问题。如果你有一个线索,你能否善意并向我解释我正在处理什么类型的问题?
知道如何调试这个问题吗?
没有找到相关结果
已邀请:
1 个回复
吞睫素