退出程序时如何关闭所有表单和流程(资源管理器)窗口

本文关键字:资源管理器 窗口 表单 何关闭 退出程序 | 更新日期: 2023-09-27 18:26:28

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (MessageBox.Show("Are you Sure you want to Exit. Click Yes to Confirm and No to continue", "WinForm", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
            {
                e.Cancel = true;
            }
            else
            {
                Application.Exit();
            }
        }

Application.Exit((; 出于某种原因,让我在程序退出之前单击两次是。它确实像这样关闭资源管理器窗口:

Process.Start("explorer", String.Format("/select,{0}", t));

当我退出程序时,此资源管理器保持打开状态。

退出程序时如何关闭所有表单和流程(资源管理器)窗口

好吧,从技术上讲,这些窗口不属于您的应用程序,因此不应关闭它们。

编辑,关于评论:下面提供的解决方案不起作用,对不起,我的错误:)

如果你真的想控制你打开的资源管理器窗口,你可以收集 Start 方法的返回值 ( http://msdn.microsoft.com/en-us/library/53ezey2s.aspx (,然后在每个窗口上调用 Kill 方法(http://msdn.microsoft.com/en-us/library/system.diagnostics.process.kill.aspx (。请记住检查它们是否仍然存在,因为用户可能已自行关闭它们。

一个窗口的简单示例:

class Form
{
//...
private Process explorerWindow = null;
}
//...
this.explorerWindow = Process.Start("explorer", String.Format("/select,{0}", t));
//... (in OnFormClosing)
if (this.explorerWindow != null && !this.explorerWindow.HasExited)
{
this.explorerWindow.Kill();
}

执行类似操作,但使用列表。您还可以挂接到 OnExited 事件,并在特定进程消失时从列表中删除它们(例如,因为用户关闭了它们(。