Windows 表单在应用程序退出时终止后台进程

Windows forms kill background process on app exit

我正在 Visual Studio 中制作一个简单的 windows 表格申请。但是当我想关闭应用程序时遇到问题。当我从任务栏右键单击它并关闭它时,我可以在任务管理器中看到后台进程仍然 运行。
我如何杀死整个应用程序?
我已经在应用程序启动时打开的第一种形式中调整了它:

     private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if(!exit)
            {
                if (MessageBox.Show("Close the app?", "Simple App", MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    exit = true;
                    Close();
                }
                else
                {
                    e.Cancel = true;
                    exit = false;
                }
            }
        }

您描述的是后台进程的主要问题。他们只是不会在调用过程结束时自动结束工作。

本质上,您有 2 种可能的选择,但两者都有延迟(并且有可能无法正常工作,具体取决于您的后台进程的稳定性)。

  1. 手动终止进程 当您创建进程时,您保存它的处理程序,然后在应用程序退出时向它发送终止信号。像往常一样,当您手动发送终止信号时,可能需要一些时间才能生效。如果 if 生效,它仍然可能发生进程忽略它或在进程执行状态结束你不希望它结束​​

  2. 在进程中设置终止标志 这个过程本身有一个他反应的标志。当您终止主应用程序时,您将标志设置为 "end me" 设置,并在后台进程中检查它进行的每次迭代(或至少定期)是否设置了标志,如果设置了则结束进程从内部。

在这两种情况下,您都可以选择在主应用程序中使用 while 循环等待并检查进程是否已正确结束。这里唯一的问题是它可能取决于后台进程的确切实现,它永远不会结束,因为它只是忽略了 kill 命令。

因此,从本质上讲,可以从主进程中终止后台进程,但它可能会延迟终止,并且可能无法正常工作。

在这种情况下,因为您希望后台进程在应用程序退出时结束,我会问自己另一个问题:您确定要在那里有一个后台进程吗?作为前台进程,它会自动执行您想要的操作:在主进程执行结束时结束。

我在 OnFormClosing 事件的所有表格上添加了 Application.Exit();。而且效果很好。