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

        2019年11月6日优化:【添加一种退出方法】

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

  • close关闭窗体,对象仍然存在,调用Close函数释放资源后可能还需要再次使用。
  • dispose,销毁对象,窗体对象被回收了,也就是不存在了,Dispose函数释放的资源不再使用。
  • application.exit.整个程序进程结束,项目中的所有对象都会被销毁,退出整个应用程序。
  • Application.ExitThread(): 强制中止调用线程上的所有消息,同样面临其它线程无法正确退出的问题。

  • System.Environment.Exit(0); 这是最彻底的退出方式,不管什么线程都被强制退出,把程序结束的很干净。 

        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;
            }
        }
发布了114 篇原创文章 · 获赞 18 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43267344/article/details/102841240