[WinForm] UserControl 释放资源的 OnHandleDestroyed 事件

使用 Form 时,我们可以从 FormClosing 事件知道 Form 准备要关闭了,

使用 UserControl 却没有这样对应的公开事件,

但 Control 已经有设计这样的 protected event,叫做 OnHandleDestroyed,


当调用 Dispose() 时,或者使用 using () {}  自动调用 Dispose() 时,就会触发 OnHandleDestroyed,

意思是控件的控制代码准备被终结,表示这个控件不能再继续使用,接着就等待被GC回收,

所以透过 override OnHandleDestroyed 事件,可以在里面将 UserControl 所产生的某些控件进行回收,

例如在UserControl 所产生的 Form 若还没释放资源,你希望在 UserControl 被释放资源前,

先将 Form 关闭,就能在UserControl 覆写的 OnHandleDestroyed 事件中处理释放资源,

例如以下 _form2 是全域变量的 Form型态,会先调用关闭方法后,再释放所有资源:

        protected override void OnHandleDestroyed(EventArgs e)
        {
            if (_form2 != null)
            {
                using (_form2)
                {
                    _form2.Close();
                }
            }

            base.OnHandleDestroyed(e);
        }

需不需要调用 Close 取决于 FormClosing 等关闭的事件中,有没有写相关的代码,

如果没有,也可以简单的直接写

        protected override void OnHandleDestroyed(EventArgs e)
        {
            if (_form2 != null)
            {
                _form2.Dispose();
            }

            base.OnHandleDestroyed(e);
        }

以上有误的话,请不吝啬纠正,感谢。

原文:大专栏  [WinForm] UserControl 释放资源的 OnHandleDestroyed 事件


猜你喜欢

转载自www.cnblogs.com/petewell/p/11453071.html