2

私はAwesomiumを使用してWebブラウザーを開発しており、その最新バージョンを使用しています。ただし、WebControlsを破棄するとき、およびWebCoreをシャットダウンするとき(WebControlsも破棄する)にいくつかの問題があります。

誰かがこれを回避する方法を知っていますか?前もって感謝します

4

2 に答える 2

1

私はこれで少しテストをしました。私は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();
    }

コントロールを破棄する場所のさまざまな配置を試してみることをお勧めします。通常、ホストがリリースした後、そのハンドルを解放します。この問題が発生しておらず、Awesomium.Windows.Forms.WebControlがDisposeで正しく機能していることを確認できます。

編集、ここで私のテストプロジェクトをDropBoxにアップロードしました。解決策は、VisualStudio2012および.net4.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 に答える