进程不会在表单关闭时终止

Dar*_*ill 4 c# winforms

我刚刚使用Windows Forms构建了我的测试应用程序的第一版.我注意到,在运行应用程序时,它运行完全没有故障,就像调试视图一样.关闭应用程序时,我注意到实际的可执行文件/进程名称在任务管理器中挂起,并且没有正确关闭.

经过进一步检查,我注意到在调用另一个表单而不隐藏前一个表单时,会产生一个新进程(有点预期).当关闭新表单(包含几个文本框,标签和a DataGridView)时,新生成的进程不会杀死它自己,但仍然存在.然后关闭主窗口窗口从任务栏/视图中消失,但仍然使用8,268k - 8,308k内存保持活动进程

任务管理器

    private void ClientSearch_Click(object sender, EventArgs e)
    {
        ClientSearch Clientsearch = new ClientSearch();
        Clientsearch.Show();
    }
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Han*_*ant 7

此行为的标准说明:

  • 当您显示另一个窗口并忘记取消隐藏时,隐藏您的主窗口.没有可见的窗口,用户也无法做任何事情来取消隐藏它,但您的应用程序当然会保持驾驶状态.

  • 在主窗口关闭时启动一个线程并确保它没有被终止.将线程的IsBackground属性设置为true是一种解决方法.

  • 在代码中调用Application.DoEvents().一种非常危险的方法,允许您关闭用户界面,但不会停止调用它的循环,因此您的应用程序的主线程也不会退出.

调试应用程序时,此类问题也很容易看到.您可能已经习惯使用工具栏上的红色矩形(也称为Debug + Stop Debugging)来强制调试器退出.Debug + Windows + Threads调试器窗口可以深入了解最后两个项目符号的原因.或者您可以使用工具+附加到进程将调试器附加到僵尸进程.


And*_*der 5

称呼

Application.Exit();
Run Code Online (Sandbox Code Playgroud)

在表单关闭/关闭时。

您的应用程序每次运行应该只创建一个进程。新的形式不应该创建新的流程。