打开资源pipe理器窗口并等待它closures

我有一个程序是打开资源pipe理器窗口到某个文件夹,但我想在资源pipe理器窗口closures后执行一个操作,但如果我使用下面的代码:

Process proc = Process.Start("explorer.exe", "D:\\"); proc.WaitForExit(); 

它根据需要打开资源pipe理器窗口,但WaitForExit命令没有任何作用,它只是通过它。

是否有不同的方式打开浏览器窗口,可以让我知道什么时候被用户closures?

无法重新生成错误。 刚试过这个:

 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#库中某处获得更多控制权限,而不是浏览器。