当我退出程序时,如何关闭所有表单和进程(资源管理器)窗口?

时间:2013-08-04 22:55:08

标签: c# winforms

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();由于某种原因,让我在程序退出前单击两次YES。 它像这样关闭浏览器窗口:

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

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

1 个答案:

答案 0 :(得分:1)

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

编辑,关于评论:以下提供的解决方案无效,对不起,我的错误:)

如果你真的想要控制你打开的浏览器窗口,你可以收集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();
}

做类似的,但是使用List。您还可以连接到OnExited事件并从列表中删除特定进程,当它们消失时(例如,因为用户关闭了它们)。