Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 退出程序时,如何关闭所有窗体和进程(资源管理器)窗口?_C#_Winforms - Fatal编程技术网

C# 退出程序时,如何关闭所有窗体和进程(资源管理器)窗口?

C# 退出程序时,如何关闭所有窗体和进程(资源管理器)窗口?,c#,winforms,C#,Winforms,Application.Exit();出于某种原因,请在程序退出之前单击两次“是”。 它不会像这样关闭资源管理器窗口: 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", "Win

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

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

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

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

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

如果您确实想控制已打开的资源管理器窗口,可以收集Start方法()的返回值,然后对每个方法()调用Kill方法。记得检查它们是否仍然存在,因为用户可能已经自己关闭了它们

一个窗口的简单示例:

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

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

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

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

如果您确实想控制已打开的资源管理器窗口,可以收集Start方法()的返回值,然后对每个方法()调用Kill方法。记得检查它们是否仍然存在,因为用户可能已经自己关闭了它们

一个窗口的简单示例:

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

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

这可能不起作用。启动的资源管理器通常会在通知已运行的资源管理器打开新窗口后快速退出。而且已经运行的探索者绝对不应该被杀死。事实上它不起作用。我必须改变这个。探险家Windows已退出!this.explorerWindow.has退出第二次杀戮需要很长时间,几乎5秒,直到它完成杀戮。最后,资源管理器窗口仍然打开。}这是以关闭事件的形式工作的:foreach(Process p in Process.getProcessByName(“explorer”){p.Kill();}但是,它将关闭所有资源管理器窗口,而不仅仅是应用程序打开的窗口……啊,那么我将不使用它。所以现在我将在关闭程序时不关闭浏览器而保留它。问题是用户可能忘记打开资源管理器窗口。这可能不起作用。启动的资源管理器通常会在通知已运行的资源管理器打开新窗口后快速退出。而且已经运行的探索者绝对不应该被杀死。事实上它不起作用。我必须改变这个。探险家Windows已退出!this.explorerWindow.has退出第二次杀戮需要很长时间,几乎5秒,直到它完成杀戮。最后,资源管理器窗口仍然打开。}这是以关闭事件的形式工作的:foreach(Process p in Process.getProcessByName(“explorer”){p.Kill();}但是,它将关闭所有资源管理器窗口,而不仅仅是应用程序打开的窗口……啊,那么我将不使用它。所以现在我将在关闭程序时不关闭浏览器而保留它。问题是用户可能忘记打开浏览器窗口。在您的其他位置e.Cancel=false;关于您的流程,是否设置了对流程对象的引用?…如果没有,请放置一个引用,例如process p=process.Start(“explorer”,String.Format(“/select,{0}”,t))。在您的其他位置e.Cancel=false;关于您的流程,是否设置了对流程对象的引用?…如果没有,请放置一个引用,例如process p=process.Start(“explorer”,String.Format(“/select,{0}”,t))。