1 问题陈述
在开发中,遇到这样一个问题:
点击程序主窗体右上角的叉号关闭应用程序后,程序的进程却没有关闭。
通过查阅资料,了解到,产生此类问题的原因主要有以下两点:
1)程序中存在死循环。
2)程序为多线程程序,且在窗体关闭后,仍有线程在工作。
解决方法:
@方法1
将循环条件while (true)修改为while (this.Visible)。
这样一来,当窗体关闭后,窗体的Visible属性值变为false,则while循环随即被终止,进而进程也会被正常结束。
@方法2
在窗体的FormClosing事件处理方法中,使用代码System.Environment.Exit(0)强制退出当前进程,这样一来,不管进程下是否还有线程在工作,都会一概结束。
private void frmCase2_FormClosing(object sender, FormClosingEventArgs e)
{
System.Environment.Exit(0);
}
方法1的原理是结束程序中的死循环进而结束线程,从而使进程能够正常结束;而方法2是不管线程有没有工作都强制关闭所有线程进而正常结束进程。
我们这里不去探讨哪种方法更好,只想对解决此类问题的思考方向给出一个说明,那就是:通过结束所有线程的工作来保证进程的正常结束。当然这也是本文的一个主题。
由于我的这个程序是java语言写的,没有找到杀死进程的方法,所以还是把死循环中的true改成当前窗体是否可见,当关闭窗体的时候,那么窗体不可见,即死循环也结束了!!
后面有好的建议也欢迎留言