关于程序运行了System.exit但是后台却没有结束该进程

    技术2023-05-20  89

    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改成当前窗体是否可见,当关闭窗体的时候,那么窗体不可见,即死循环也结束了!! 后面有好的建议也欢迎留言

    Processed: 0.013, SQL: 9