何时调用Control.DestroyHandle?
时间:2020-03-05 18:47:32 来源:igfitidea点击:
什么时候叫这个?更具体地说,我有一个正在创建的控件,该控件在关闭窗口时如何释放手柄。在正常的win32中,我会在wm_close
期间执行它,而DestroyHandle
是.net等效文件吗?
我不想自己破坏窗口句柄,我的控件正在侦听另一个对象上的事件,而当我的控件被破坏时,我想停止侦听那些事件。例如:
void Dispose(bool disposing) { otherObject.Event -= myEventHandler; }
解决方案
回答
通常,在Dispose方法中会调用DestroyHandle。因此,我们需要确保处置所有控件,以避免资源泄漏。
回答
Dispose确实会调用DestroyHandle,但并非总是如此。如果关闭父窗口,则Windows将销毁所有子窗口。在这种情况下,"处置"将不会调用" DestroyHandle"(因为它已被销毁)。换句话说,DestroyHandle
被调用来销毁窗口,当销毁窗口时不被调用。
解决方案是覆盖" OnHandleDestroyed"或者" Dispose"。我选择了"处理"。