所以,我之前从未做过相当规模的WPF项目,但是这个让我感到疑惑; WPF课程没有实现IDisposable
的原因是什么?相比之下,Windows窗体中的所有UI元素都实现了IDisposable
,以确保它们摆脱了底层句柄等。
我认为那里有相同的Windows对象,这些资源必须被释放;那么,WPF是如何做到的呢?
除了Close()
之外,我还需要对WPF Window对象做些什么吗?
答案 0 :(得分:18)
WinForms控件具有句柄,因为它们是Win32控件的包装器。 WPF控件不是(嗯,窗口是,但它们托管的控件不是)。原因是,毕竟WPF窗口只是一个Direct3D渲染上下文,所有控件都只是一堆三角形。因此,他们不需要实际注册到操作系统,因此,他们没有句柄(除了窗口和任何继承自HwndHost
的东西,当然,是 Win32对象)。
这就是为什么在WPF和WinForms之间存在如此大的互操作层的原因:WPF控件根本不是Windows对象。