在开发 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(Message& m) 在 System.Windows.Forms.Control.DefWndProc (Message& m) 在 System.Windows.Forms.AxHost.WndProc(Message& 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 框架 3.5 和 4.0 上复制此问题。
检查崩溃时进程在做什么,异常似乎是 GAC 部署的 DLL 上似乎有多个CreateFileMapping
操作失败,结果为FILE LOCKED WITH ONLY READERS
.
此视图已被过滤以仅显示该类型的结果,但似乎每个 DLL 恰好发生两次。这是否意味着什么?
现在,很明显我对正在发生的事情以及如何解决这个问题一无所知。如果你有线索,你能好心向我解释一下我正在处理什么类型的问题吗?
知道如何调试此问题吗?