Application.Exit() 与 Form.Close()

在MSDN上的解释是:       
    Application.Exit   方法  
    该方法停止在所有线程上运行的所有消息循环,并关闭应用程序的所有窗口。该方法并不强制应用程序退出。Exit   方法通常从一个消息循环内调用,该方法强制   Run   返回。若要只退出当前线程的某个消息循环,请调用   ExitThread。   
    警告   当调用   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);
该方法会强制进程关闭,并给操作系统一个退出代码。

posted @ 2009-11-30 20:52  无业の游民  阅读(2385)  评论(1编辑  收藏  举报