如何解决打开资源管理器窗口,然后等待其关闭
| 我有一个程序正在打开浏览器窗口到某个文件夹,但是我想在关闭浏览器窗口后立即执行操作,但是如果我使用以下代码: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#库(而不是资源管理器)控制更多的位置来进行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。