2

我正在使用 Awesomium 开发一个网络浏览器,并且我正在使用它的最新版本。但是,当我处理 WebControls 和关闭 WebCore(它也处理 WebControls)时,它会出现一些问题。

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

4

2 回答 2

1

我已经对此进行了一些测试。我试图使用 WebControl 的 WPF 版本,发现它可能会严重泄漏,尤其是当您随着时间的推移创建和销毁大量 WebControl 时。所以,我在玩 WindowsFormsHost 并使用 WebControl 的 WinForms 版本,即使它没有泄漏,我也遇到了你描述的同样问题。事实证明,您想在清理窗口的句柄后显式调用 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。希望这可以帮助!

于 2013-02-03T06:20:05.913 回答
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();
}

希望这可以帮助

于 2013-02-04T16:22:42.453 回答