欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C#中this.Close()、this,DIspose()和Application.Exit的区别

程序员文章站 2022-07-13 23:17:46
...

        今天主要解决关闭窗体和窗体之间的切换问题。共接触了这三个事件最频繁this.Close()、this,DIspose()和Application.Exit。既然遇到了,就撑着热乎劲来总结一下。

  • close关闭窗体,对象仍然存在,调用Close函数释放资源后可能还需要再次使用。
  • dispose,销毁对象,窗体对象被回收了,也就是不存在了,Dispose函数释放的资源不再使用。
  • application.exit.整个程序进程结束,项目中的所有对象都会被销毁,退出整个应用程序。

        Close,Dispose对于单个窗体,最终还是调用Exit退出。 
    Close调用会引发WM_CLOSE消息,要是在Form_Closing里面加几句代码,就可以屏蔽掉。把那个Handle   =   false就可以了。 
        Dispose是直接释放整个对象,也就是手动释放。

使用this.Close(),close,实际上是调用了dispose.

        如果只针对于一个窗体,此方法没有问题,但是如果要关闭的窗体在关闭之前打开过另一个窗体,然而另一个窗体如果没有处理妥当的话,那么使用此事件就会出现提示框无限循环的提示的问题

使用this.Dispose()

        此方法指的是释放窗体。close没有销毁实例,dispose则销毁了实例。就不是在重新使用了

使用Application.Exit();

       提示:不要在Form_Closeing事件中使用这个方法, 如果使用后就会出现提示框提示两次的现象

       原因:Application.Exit()就相当于Form_Closing时间,在这个时间中使用这个方法,就相当于又重新调用了此方法。

       以下为正确的使用方法:

private void FrmStatus_FormClosing(object sender, FormClosingEventArgs e)
        {
            DialogResult result = MessageBox.Show("确定要退出吗?", "温馨提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (result == DialogResult.Yes)
            {
            }
            else
            {
                e.Cancel = true;
            }
        }