为什么WPF不使用IDisposable,有什么后果?

And*_*ber 0 .net wpf idisposable

所以,我之前从未做过一个相当大的WPF项目,但这个让我感到疑惑; 怎么了WPF类没有实现IDisposable?相比之下,Windows窗体中的所有UI元素都实现了IDisposable,以确保它们摆脱了底层句柄等.

我认为那里有相同的Windows对象,这些资源必须被释放; 那么,WPF是如何做到的呢?

除了Close()它们之外,还有什么我需要做的WPF Window对象吗?

Eti*_*tel 18

WinForms控件有句柄,因为它们是Win32控件的包装器.WPF控件不是(嗯,窗口是,但它们托管的控件不是).原因是,毕竟WPF窗口只是一个Direct3D渲染上下文,所有控件都只是一堆三角形.因此,它们不需要实际注册到操作系统,因此,它们没有句柄(除了窗口和任何继承自HwndHost当然 Win32对象的东西).

这就是为什么在WPF和WinForms之间存在如此大的互操作层的原因:WPF控件根本不是Windows对象.

  • 我不熟悉 WPF,但我希望另一个重要方面是 WPF 使用弱事件处理程序。在某些方面,我认为这更重要,因为持有对 Win32 控件的引用的废弃对象可以使用终结器来通知 Windows 不再需要这些控件,但对来自长期发布者的“强”事件的废弃订阅者将不会在这些事件发布者的生命周期内收集。 (2认同)