打开资源管理器窗口,然后等待其关闭

问题描述

| 我有一个程序正在打开浏览器窗口到某个文件夹,但是我想在关闭浏览器窗口后立即执行操作,但是如果我使用以下代码
Process proc = Process.Start(\"explorer.exe\",\"D:\\\\\");
proc.WaitForExit();
它会根据需要打开资源管理器窗口,但是WaitForExit命令无效,它就在其后。 有没有其他方法可以打开浏览器窗口,当用户关闭浏览器窗口时可以让我知道?     

解决方法

        无法重新生成错误。刚刚尝试了这个:
Process.Start(\"explorer.exe\",\"D:\\\\\").WaitForExit();
它会阻止当前线程并等待,直到我关闭资源管理器窗口。确保您不在要阻止的线程之外的其他线程上执行该命令。还要确保您设置了窗口的每个实例,以通过在.reg文件下面导入来启动
explorer.exe
的新实例:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer]
\"DesktopProcess\"=dword:00000001
[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer]
\"DesktopProcess\"=dword:00000001
[HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\BrowseNewProcess]
\"BrowseNewProcess\"=\"Yes\"
[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\BrowseNewProcess]
\"BrowseNewProcess\"=\"Yes\"
您需要重新启动计算机才能生效。     ,        该问题在《旧事物》中得到了很好的解释:   WaitForSingleObject立即返回的原因是Explorer是单实例程序(很好,有限实例)。当您打开“资源管理器”窗口时,请求将移交给正在运行的资源管理器副本,并且您启动的资源管理器副本将退出。这就是为什么WaitForSingleObject立即返回的原因。 他提供了您可能会使用的一些解决方案(大量使用了PInvoke),例如使用类似的东西。 最后,使用其他类型的文件浏览器可能更容易一些,可能是从C#库(而不是资源管理器)控制更多的位置来进行。