我有一个程序是打开资源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#库中某处获得更多控制权限,而不是浏览器。