A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  Close()关闭窗体与Application.Exit()关闭窗体的区别?

16 个回复

倒序浏览
close关闭的是当前打开的窗体,exit强制退出整个程序。

评分

参与人数 1技术分 +1 黑马币 +6 收起 理由
陈福军 + 1 + 6 赞一个!

查看全部评分

回复 使用道具 举报
close关闭窗体,对象仍然存在,调用Close函数释放资源后可能还需要再次使用。application.exit.整个程序进程结束,项目中的所有对象都会被销毁,退出整个应用程序。
回复 使用道具 举报
close是关闭窗体,application.exit是退出整个应用程序
回复 使用道具 举报
Application.Exit   方法     
通知所有消息泵必须终止,并且在处理了消息以后关闭所有应用程序窗口。

Form.Close   方法
关闭窗体。   

如果该窗体是应用程序的主启动窗体,则調用窗体的Close()方法,跟調用Application.Exit的效果差不多。
如果该窗体非主启动窗体,则只是关闭该窗体而不关闭整个应用程序。

如果是多线程应用程序,要想关闭整个应用程序,除了調用Application.Exit()方法或者主启动窗体的Close()之外,还需要显示的調用终止线程的代码。否则窗体虽然关闭了,看似应用程序退出了,其实线程依然还驻留在内存中工作。打开任务管理器依然可以看到。
回复 使用道具 举报
close关闭的是当前打开的窗体,exit会退出整个程序,关闭所以打开的程序窗口。
回复 使用道具 举报
Application.Exit() 方法  
    该方法停止在所有线程上运行的所有消息循环,并关闭应用程序的所有窗口。该方法并不强制应用程序退出。Exit()方法通常从一个消息循环内调用,该方法强制Run返回。
    当调用 Application.Exit()方法以退出应用程序时,不引发  Form.Closed  和 Form.Closing  事件。如果在必须执行的其中一个事件中有验证代码,则在调用 Exit ()方法之前,应分别为每个打开的窗体调用  Form.Close()方法。     


    其实,程序从Application.Run(new   Form1)开始,到Application.Exit()结束,//销毁窗体,回收资源除外   
    这之中,如果你打开了1个窗体,这两种方法就是一样,如果打开多个,比如你Form1里又开了form2,form3等等,那么,你除了Application.Run()参数以外的实例,执行close就是关闭那个窗体,程序不退出,Application.Exit就都关闭了。

  

但是 调用 Application.Exit() 并不一定能让程序立即退出,程序会等待所有的前台线程终止后才能真正退出。
解决方法:
1. 背景线程
为避免因为线程造成程序无法退出,可以将线程设置为后台线程(IsBackground = true)。
当然,这样一来,你需要自行处理后台线程的数据操作安全。

2. Environment.Exit(0);
该方法会强制进程关闭,并给操作系统一个退出代码。
回复 使用道具 举报
Application.Exit   方法     通知所有消息泵必须终止,并且在处理了消息以后关闭所有应用程序窗口。
Form.Close   方法 关闭窗体。
回复 使用道具 举报
Application.Exit()是关闭退出整个应用程序
this.Close()关闭当前窗体。
回复 使用道具 举报
简单明了的的说是Application.Exit()整个程序进程结束,退出整个程序。

Close()只是关闭而已,程序还存在。
回复 使用道具 举报
Application.Exit   方法     
通知所有消息泵必须终止,并且在处理了消息以后关闭所有应用程序窗口。

Form.Close   方法
关闭窗体。   

如果该窗体是应用程序的主启动窗体,则調用窗体的Close()方法,跟調用Application.Exit的效果差不多。
如果该窗体非主启动窗体,则只是关闭该窗体而不关闭整个应用程序。

如果是多线程应用程序,要想关闭整个应用程序,除了調用Application.Exit()方法或者主启动窗体的Close()之外,还需要显示的調用终止线程的代码。否则窗体虽然关闭了,看似应用程序退出了,其实线程依然还驻留在内存中工作。打开任务管理器依然可以看到。
------------------------------
回复 使用道具 举报
close :它是针对窗体 ,关闭窗体 ,但对象仍然存在,

Application.Exit:整个程序进程结束,项目中所以对象都将被销毁,退出整个应用程序
回复 使用道具 举报
Close()方法用来关闭窗体,Application.Exit()表示退出应用程序。下面我们主要看下这两个方法。
      Close()方法表示如果该窗体是应用程序的主启动窗体,调用Close()方法和调用Application.Exit()的效果一样;如果如果该窗体不是主启动窗体,则只关闭该窗体而不会关闭整个应用程序。
      Application.Exit()表示通知所有消息必须终止,并且在处理了消息以后关闭所有应用程序窗口。该方法停止在所有线程上运行的消息循环,并且关闭应用程序的所有窗口。它并不强制应用程序退出。
另外,如果是多线程应用程序,要想关闭整个应用程序,除了调用Application.Exit()方法或Close()方法外,还需要显示的调用终止线程代码。否则,虽然看似窗体关闭了,应用程序退出了,其实线程依然在内存中工作,打开任务管理器就可以看到。
      还需要注意的是,当调用Application.Exit()退出应用程序时,不会引发Form.Closed和Form.Closing事件。如果必须执行的其中一个事件中有验证代码,则在调用Application.Exit()方法之前,应分别为每个打开的窗体调用Form.Close()方法。
回复 使用道具 举报

问题解决请将分类设为"已解决".黑马有你更精彩
回复 使用道具 举报
Close():用来关闭窗体,Application.Exit():退出应用程序
回复 使用道具 举报
个人理解。Close()仅仅是关闭调用该方法的窗体,.net内部在Close()方法中还调用了Dispose()用于释放该资源,与应用程序无关。而Application.Exit()则是直接退出整个应用程序。在多窗体或多线程应用程序中就能看出他们的区别,完全是两个概念。
回复 使用道具 举报
Close():用来关闭当前窗体
Application.Exit():完全退出应用程序
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马