我刚刚使用Windows Forms构建了我的测试应用程序的第一版。我注意到,在运行应用程序时,它运行完全没有故障,就像调试视图一样。关闭应用程序时,我注意到实际的可执行文件/进程名称在任务管理器中挂起,但没有正确关闭。
经过进一步检查,我注意到在调用另一个表单而不隐藏上一个表单时,会产生一个新进程(有点预期)。关闭新表单(包含几个文本框,标签和DataGridView
)时,新生成的进程不会杀死它自己,但仍然存在。然后关闭主窗口,窗口从任务栏/视图中消失,但仍然使用8,268k - 8,308k内存保持活动进程
private void ClientSearch_Click(object sender, EventArgs e)
{
ClientSearch Clientsearch = new ClientSearch();
Clientsearch.Show();
}
答案 0 :(得分:7)
此行为的标准解释:
当您显示另一个窗口并忘记取消隐藏时隐藏您的主窗口。没有可见的窗口,用户也无法做任何取消隐藏的事情,但您的应用程序当然会保持驾驶状态。
启动一个线程,但在主窗口关闭时不确定它是否已终止。将线程的IsBackground属性设置为 true 是一种解决方法。
在代码中调用Application.DoEvents()。一种非常危险的方法,允许您关闭用户界面,但不会停止调用它的循环,因此您的应用程序的主线程也不会退出。
调试应用时,此类问题也很容易看到。您可能已经习惯使用工具栏上的红色矩形(也称为Debug + Stop Debugging)来强制调试器退出。 Debug + Windows + Threads调试器窗口可以深入了解最后两个项目符号的原因。或者您可以使用工具+附加到进程将调试器附加到僵尸进程。
答案 1 :(得分:4)
呼叫
Application.Exit();
表单关闭/关闭。
您的应用程序应该每次运行只创建一个进程。新表格不应该创建新流程。