我正在尝试找到一种使用C#语言检查是否有任何复制作业正在进行的方法,因为我需要重新启动explorer.exe进程来刷新应用程序更改的某些设置。所以我想避免破坏正在进行中的任何复制过程。这里是否有人有好的技巧来解决这个问题?提前致谢
我在这里冒险猜测,但据我所知,这不在Windows复制命令(众所周知的有限)的可能性范围内。然而,RoboCopy(以及其他类似的工具)支持在完成时返回值。只要未收到返回值,这将使您轻松防止资源管理器进程的(自动)终止(手动终止当然仍然可能)。 由于您说复制不是由您发起的,因此值得使用FileSystemWatcher,虽然它也有其限制需要注意。
你可以尝试获取explorer.exe的页面故障增量计数器。请参见this link。如果数字很高(我知道这不是精确科学),则表示有些事情正在发生(也许是复制?)。这不会给你一个明确的答案,而是一个提示。即使页面故障很低甚至为零,复制仍然可能在进行中 - 例如当复制显示提示给用户时,等待网络等。 你可以监视该进程几秒钟,如果页面故障很低,请询问用户是否可以重新启动该进程。未经测试的想法,但值得探索。