我感兴趣的是,在通过检查Process.HasFinished属性等待进程终止时,是否必须调用Process.Refresh()?
我有一段代码在没有Process.Refresh()调用的情况下工作正常但是我好奇天气这是巧合吗?我可以看到msdn示例有Process.Refresh()调用...
如果没有必要,并且Process.HasExited是我需要的唯一属性,那么调用Process.Refresh()有什么好处吗?如果没有,是否有理由在msdn示例中?
感谢您的回答。
答案 0 :(得分:4)
正如您所注意到的,MSDN没有准确指定,缓存了哪些信息,因此需要使用Process.Refresh()
进行刷新。
在使用反射器对类进行简短(并且可能是不完整的)分析后,似乎HasExited
属性在每次访问时都被“计算”。 Refresh
似乎主要强制更新内部ProcessInfo
对象,其中包含内存消耗,句柄信息等信息。
另一方面,Refresh
并不真正获取所有这些信息,它只是丢弃内部缓存。只有在访问任何属性时才会重新获取信息。所以Refresh
实际上没有性能开销。
因此,如果Microsoft决定在将来更改Refresh
实施,则调用HasExited
可能更安全。
答案 1 :(得分:0)
不直接回答您的问题,但如果您想等到流程终止,则可以使用WaitForExit()
类的Process
方法。