1
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();
            }
        }

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

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

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

4

1 回答 1

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();
}

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

于 2013-08-04T22:58:53.577 回答