有没有办法绕过Awesomium 1.7 WebCore Shutdown Bug

时间:2013-01-31 19:42:43

标签: c# browser awesomium

我正在使用Awesomium开发一个webbrowser,我正在使用它的最新版本。但是当我处理WebControls和关闭WebCore(它也处理WebControls)时,它有一些问题。

有没有人知道解决这个问题的方法?提前致谢

2 个答案:

答案 0 :(得分:1)

我已经做了一些测试。我试图使用WPF版本的WebControl,并发现它可能会非常严重地泄漏,特别是当您随着时间的推移创建和销毁大量WebControl时。所以,我正在使用WindowsFormsHost并使用WinConms版本的WebControl,即使它没有泄漏,我也遇到了你描述的相同问题。事实证明,你想明确地调用Dispose后,你的窗口的句柄就会被清除。

在WPF中,我继承了WindowsFormsHost并指定了对DestroyWindowCore的覆盖,如下所示:

    protected override void DestroyWindowCore(System.Runtime.InteropServices.HandleRef hwnd) {
        base.DestroyWindowCore(hwnd);// clean up handles

        // Disposing here prevents access violation from crashing non-debug instances
        // Confirmed to prevent access violation on WebCore shutdown as well

        webControl1.Dispose();
        webControl1 = null;
    }

    // This code seems to work in WinForms, I placed this in Form1.cs:
    protected override void DestroyHandle() {

        base.DestroyHandle();
        webControl1.Dispose();
    }

我建议您使用处理控件的不同位置。通常在主机释放它的句柄之后。我可以确认我不再有这个问题,并且Awesomium.Windows.Forms.WebControl在Dispose上正常运行

编辑,我已将我的测试项目上传到DropBox here。该解决方案适用于Visual Studio 2012,目标是.net 4.5。希望这有帮助!

答案 1 :(得分:0)

我通过在主窗体中向FormClosing事件添加一些代码来解决它:

private void frmMain_FormClosing(object sender, FormClosingEventArgs e)
{
  foreach(WebControl awWebControl in WebCore.Views)
  {
     //Dispose all active views in WebCore
     awWebControl.Dispose();

  }
  //then you can Shutdown the WebCore
  WebCore.Shutdown();
}

希望这有帮助