在開發WPF/WinForms互操作應用程序時,我遇到了一個討厭的問題。我一直試圖解決這個問題三天,但我無法取得任何進展。我懷疑我可以提供足夠的信息來獲得解決方案,但我正在尋找任何能夠解釋這裏究竟發生了什麼的人?System.Windows.Forms中的AccessViolationException,在WPF中使用WinFormsHost
我正在使用的組件是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,MSG的Int32,IntPtr的wParam中,IntPtr的LPARAM) 在System.Windows.Forms.NativeWindow.DefWndProc(消息&米) 在System.Windows.Forms的.Control.DefWndProc(消息&米) 在System.Windows.Forms.AxHost.WndProc(消息&米) 在System.Windows.Forms.Control.ControlNativeWindow.OnMessage(消息&米) 在System.Windows.Forms的.Control.ControlNativeWindow.WndProc(Message & m) at 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。這是否意味着什麼?
現在,很明顯我對所發生的事情以及如何解決這個問題毫無頭緒。如果你有線索,你可以善意向我解釋我正在處理的問題是什麼類型的?
任何想法如何調試此問題?