正在调用Process.HasFinished所需的Process.Refresh()

时间:2010-05-03 08:55:57

标签: c# process

我感兴趣的是,在通过检查Process.HasFinished属性等待进程终止时,是否必须调用Process.Refresh()?

我有一段代码在没有Process.Refresh()调用的情况下工作正常但是我好奇天气这是巧合吗?我可以看到msdn示例有Process.Refresh()调用...

如果没有必要,并且Process.HasExited是我需要的唯一属性,那么调用Process.Refresh()有什么好处吗?如果没有,是否有理由在msdn示例中?

感谢您的回答。

2 个答案:

答案 0 :(得分:4)

正如您所注意到的,MSDN没有准确指定,缓存了哪些信息,因此需要使用Process.Refresh()进行刷新。

在使用反射器对类进行简短(并且可能是不完整的)分析后,似乎HasExited属性在每次访问时都被“计算”。 Refresh似乎主要强制更新内部ProcessInfo对象,其中包含内存消耗,句柄信息等信息。

另一方面,Refresh并不真正获取所有这些信息,它只是丢弃内部缓存。只有在访问任何属性时才会重新获取信息。所以Refresh实际上没有性能开销。 因此,如果Microsoft决定在将来更改Refresh实施,则调用HasExited可能更安全。

答案 1 :(得分:0)

不直接回答您的问题,但如果您想等到流程终止,则可以使用WaitForExit()类的Process方法。