WindowsFormsHost コントロールが破棄されず GDI オブジェクトが増加し、リークします。

適用対象: .NET Framework 4.5

現象


WPF アプリケーションから、Windows フォーム コントロールを WindowsFormsHost コントロールの Child プロパティに指定し、そのウィンドウの開閉を繰り返すと GDI オブジェクトが増加し続けることがあります。

原因


WindowsFormsHost が内部で作成するオブジェクトに関わる GDI のリソースは、ウィンドウを破棄しただけでは解放されません。

解決方法


ウィンドウをクローズする際、以下のように明示的に WindowsFormsHost コントロールを破棄します。

private void Window_Closed(object sender, EventArgs e)
{
windowFormsHost1.Child = null;
windowFormsHost1.Dispose();
}

状況


マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。