Windows窗体在应用程序退出时终止后台进程

时间:2015-01-23 07:51:38

标签: c# winforms visual-studio-2013 background-process

我在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 个答案:

答案 0 :(得分:1)

我在Application.Exit();事件中的所有表单上添加了OnFormClosing。它运作良好。

答案 1 :(得分:0)

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

从本质上讲,你有两种可能的选择,但两者都有延迟(并且根据你的后台进程的稳定程度而有可能不工作)。

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

  2. 在这个过程中有一个杀戮旗帜 这个过程本身有一个标志,他对此作出反应。当您终止主应用程序时,您将标志设置为“结束我”设置,并在后台进程中检查它所做的每次迭代(或至少定期)是否设置了标志并且如果设置了它只是结束从内。

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

    因此本质上可以从主进程中杀死后台进程但是它可能是延迟杀死而且它可能无法工作。

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