我感兴趣的是,当通过检查Process.HasFinished属性等待进程终止时,调用Process.Refresh()是否是强制的?
我有一段代码在没有Process.Refresh()调用的情况下工作得很好,但是我很好奇这是不是巧合?我可以看到一个msdn示例具有Process.Refresh()调用...
如果不需要,并且Process.HasExited是我唯一需要的属性,那么调用Process.Refresh()有什么好处吗?如果不是,是否有原因出现在msdn示例中?
感谢您的回答。
发布于 2010-05-03 17:23:36
正如您已经注意到的,MSDN并没有确切地指定哪些信息被缓存,因此需要使用Process.Refresh()进行刷新。
在使用反射器对类进行了简短(可能不完整)的分析之后,似乎每次访问HasExited属性时都会对其进行“计算”。Refresh似乎主要是强制更新内部ProcessInfo对象,该对象包含内存消耗、句柄信息等信息。
另一方面,Refresh并不真正获取所有这些信息,它只是丢弃了内部缓存。只有当您访问任何属性时,才会重新获取信息。因此,Refresh实际上没有性能开销。因此,调用Refresh可能更安全,以防微软将来决定更改HasExited实现。
发布于 2010-05-03 17:27:32
不会直接回答您的问题,但如果您希望等到进程终止,则可以使用Process类的WaitForExit()方法。
https://stackoverflow.com/questions/2756999
复制相似问题