C# 有没有办法解决Awesomium 1.7 WebCore关闭错误

C# 有没有办法解决Awesomium 1.7 WebCore关闭错误,c#,browser,awesomium,C#,Browser,Awesomium,我正在用Awesomium开发一个网络浏览器,我正在使用它的最新版本。但是,当我处理WebControl和关闭WebCore(也处理WebControl)时,它会出现一些问题 有人知道怎么解决这个问题吗?提前感谢我已经用这个做了一些测试。我试图使用WPF版本的WebControl,发现它可能会非常严重地泄漏,特别是当您创建和销毁大量网络控制时。所以,我当时在玩弄WindowsFormsHost,使用WinForms版本的WebControl,即使它没有泄漏,我也遇到了与您描述的相同的问题。事实证

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


有人知道怎么解决这个问题吗?提前感谢

我已经用这个做了一些测试。我试图使用WPF版本的WebControl,发现它可能会非常严重地泄漏,特别是当您创建和销毁大量网络控制时。所以,我当时在玩弄WindowsFormsHost,使用WinForms版本的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();
    }
我建议您在处理控件的不同位置进行操作。通常在主机释放其句柄之后。我可以确认我不再存在此问题,并且在Dispose上Awesomium.Windows.Forms.WebControl功能正常


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

我通过在主窗体中的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();
}

希望这有帮助

你到底在做什么?为什么关机(在退出或之前)-以及一些细节、代码/测试。也许您处理的网络控件仍然是Awesomium的“所有”,它无法处理这种情况?不,我做了一些研究,这是Awesomium 1.7候选发行版中的一个已知错误。但是我想知道是否有办法解决这个问题我已经用不同的方法解决了,但是谢谢你的回复;)也许你可以更新你的问题,包括你发现了什么?好的,我会自己回答question@SilverX你的测试项目不适合我。它可以编译和运行,但是生成的浏览器没有显示任何内容(只有灰色屏幕)。对不起,对我来说似乎工作得很好。如果编译,则必须至少使用1.7。你有更多的信息吗?灰色屏幕通常表示控件已加载,但未导航到任何页面。。也许可以检查以确保它在某个地方导航?如果在整个应用程序范围内只有几个实例处于活动状态,这将非常好。但是,如果你像我一样不断地创建和销毁浏览器实例,等到应用程序关闭意味着你的应用程序中可能有数百MB的内存。对我来说,当承载控件的元素被销毁时,处置该控件更有意义。@SilverX是的,也许是,但当我在运行webview时处置webcontrol时,底层webview不会被处置。因此,当我试图关闭core并停止websession时,它崩溃了,因为那些底层视图仍然存在。有了这段代码,它似乎也在处理底层视图。注意:当应用程序运行时,当一个选项卡被移除时,我确实会处理webcontrol。考虑到我无法重现您在使用我提到的准则处理webcontrol时描述的内容,这是非常奇怪的。当应用程序关闭时,我也不需要手动处理视图。我已经在WinForms和WPF中进行了测试。WPF应用程序要求更高,并且可以重新创建视图,不仅是在移除选项卡时,而且每次tabcontrol进入/离开视图时。这可能值得一试,如果视图没有被正确删除,那么在您处理webcontrol时,它也很有可能没有被正确处理,因此视图会被卡住,直到您处理它为止manually@SilverX我现在已经用wpf测试了它,所以我重写了我所有的代码,现在我再也没有这个问题了。唯一的问题是wpf网络控制还有一些其他问题。但是谢谢你的努力!是的,我也在使用WPF,但由于GPU加速了图形和更好的内存消耗,我托管了WinForms WebControl。没问题,我记得当我遇到这个问题时读过这篇文章,所以我想我会和大家分享我是如何解决这个问题的。