自定义WebBrowser(winforms)代码上的致命错误

在CustomWebBrowser(winforms)代码上获得致命exception。

运行时遇到致命错误。 错误的地址是0x6c9a60c6,在线程0xf94上。 错误代码是0xc0000005。 此错误可能是CLR中的错误,也可能是用户代码的不安全或不可validation部分中的错误。 此错误的常见来源包括COM-interop或PInvoke的用户封送错误,这可能会破坏堆栈。

这在安装了.Net Framework 4.5的计算机上运行良好,但不适用于具有.Net framework 4.0的计算机

// constructor public AutoCompleteWebBrowserSite(WebBrowser host) : base(host) { // get the CCW object for this _unkOuter = Marshal.GetIUnknownForObject(this); Marshal.AddRef(_unkOuter); try { // aggregate the CCW object with the helper Inner object _inner = new AutoCompleteHelper(this); _unkInnerAggregated = Marshal.CreateAggregatedObject(_unkOuter, _inner); // obtain private WebBrowserSite COM interfaces try { _baseIDocHostUiHandler = (WebBrowserNativeMethods.IDocHostUIHandler) Marshal.GetTypedObjectForIUnknown(_unkInnerAggregated,typeof (WebBrowserNativeMethods.IDocHostUIHandler)); } catch(Exception) } finally { Marshal.Release(_unkOuter); } } 

_baseIDocHostUiHandler = (WebBrowserNativeMethods.IDocHostUIHandler)Marshal.GetTypedObjectForIUnknown(_unkInnerAggregated,typeof (WebBrowserNativeMethods.IDocHostUIHandler));抛出了exception_baseIDocHostUiHandler = (WebBrowserNativeMethods.IDocHostUIHandler)Marshal.GetTypedObjectForIUnknown(_unkInnerAggregated,typeof (WebBrowserNativeMethods.IDocHostUIHandler));

还尝试通过禁用app.config文件中的gcConcurrent来禁用并发垃圾回收

任何帮助将非常感激。

基本上需要从构造函数中删除所有代码(主要是_baseIDocHostUiHandler)

然后在WebBrowserSite实现中,尝试返回每个方法的默认实现值。

  private const int DefaultImpVal = unchecked((int)0x80004001) #region IDocHostUIHandler int WebBrowserNativeMethods.IDocHostUIHandler.ShowContextMenu(int dwId, ref WebBrowserNativeMethods.Point pt, IntPtr pcmdtReserved, IntPtr pdispReserved) { return DefaultImpVal ; } int WebBrowserNativeMethods.IDocHostUIHandler.ShowUI(int dwId, IntPtr activeObject, IntPtr commandTarget, IntPtr frame, IntPtr doc) { return DefaultImpVal; } 

其他方法也是如此。