黑马程序员技术交流社区

标题: Close()关闭窗体与Application.Exit()关闭窗体的区别? [打印本页]

作者: 似鱼非鱼    时间: 2013-10-25 03:23
标题: Close()关闭窗体与Application.Exit()关闭窗体的区别?
  Close()关闭窗体与Application.Exit()关闭窗体的区别?
作者: 茹化肖    时间: 2013-10-25 07:31
close关闭的是当前打开的窗体,exit强制退出整个程序。
作者: 一羽丶轻舟    时间: 2013-10-25 09:38
close关闭窗体,对象仍然存在,调用Close函数释放资源后可能还需要再次使用。application.exit.整个程序进程结束,项目中的所有对象都会被销毁,退出整个应用程序。

作者: 追梦无悔    时间: 2013-10-25 10:24
close是关闭窗体,application.exit是退出整个应用程序
作者: ☜⑦圊⑥慾➹沼    时间: 2013-10-25 11:14
Application.Exit   方法     
通知所有消息泵必须终止,并且在处理了消息以后关闭所有应用程序窗口。

Form.Close   方法
关闭窗体。   

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

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

作者: 我一直在等待    时间: 2013-10-25 20:18
close关闭的是当前打开的窗体,exit会退出整个程序,关闭所以打开的程序窗口。
作者: 吴彤辉    时间: 2013-10-25 23:06
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);
该方法会强制进程关闭,并给操作系统一个退出代码。
作者: 黑马小子    时间: 2013-10-25 23:10
Application.Exit   方法     通知所有消息泵必须终止,并且在处理了消息以后关闭所有应用程序窗口。
Form.Close   方法 关闭窗体。
作者: 喜之郎果冻    时间: 2013-10-26 00:20
Application.Exit()是关闭退出整个应用程序
this.Close()关闭当前窗体。
作者: aihuahuaxx    时间: 2013-10-28 09:13
简单明了的的说是Application.Exit()整个程序进程结束,退出整个程序。

Close()只是关闭而已,程序还存在。
作者: 李小熊    时间: 2013-10-28 09:32
Application.Exit   方法     
通知所有消息泵必须终止,并且在处理了消息以后关闭所有应用程序窗口。

Form.Close   方法
关闭窗体。   

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

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

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

问题解决请将分类设为"已解决".黑马有你更精彩
作者: 凌晨丶草未眠    时间: 2013-10-29 12:22
Close():用来关闭窗体,Application.Exit():退出应用程序
作者: 蒋东东    时间: 2013-10-30 14:55
个人理解。Close()仅仅是关闭调用该方法的窗体,.net内部在Close()方法中还调用了Dispose()用于释放该资源,与应用程序无关。而Application.Exit()则是直接退出整个应用程序。在多窗体或多线程应用程序中就能看出他们的区别,完全是两个概念。
作者: zhangqiang    时间: 2013-11-6 14:05
Close():用来关闭当前窗体
Application.Exit():完全退出应用程序




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2