1

したがって、これまで大規模な WPF プロジェクトを行ったことはありませんが、これには疑問があります。WPF クラスが実装されていないのはIDisposableなぜですか? 比較すると、Windows フォームのすべての UI 要素は を実装IDisposableしており、基になるハンドルなどを確実に取り除くことができます。

そこには同じ Windows オブジェクトが隠れているので、それらのリソースを解放する必要があると思います。では、WPF はどのようにそれを行っているのでしょうか。

WPF Window オブジェクトを使用する以外に、何かする必要があることはありClose()ますか?

4

1 に答える 1

18

WinForms コントロールは、Win32 コントロールのラッパーであるため、ハンドルを持ちます。WPF コントロールはそうではありません (ウィンドウはそうですが、それらがホストするコントロールはそうではありません)。その理由は、結局のところ、WPF ウィンドウは単なる Direct3D レンダリング コンテキストであり、すべてのコントロールは三角形の集まりに過ぎないからです。そのため、実際に OS に登録する必要はありません。そのため、ハンドルはありません (HwndHostもちろん、Win32 オブジェクトである から継承するウィンドウとすべてを除きます)

これが、WPF と WinForms の間に非常に大きな相互運用層がある理由です。WPF コントロールは単純に Windows オブジェクトではありません。

于 2012-05-14T12:59:34.200 に答える