首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Process.HasFinished是否需要调用Process.Refresh()

Process.HasFinished是否需要调用Process.Refresh()
EN

Stack Overflow用户
提问于 2010-05-03 16:55:57
回答 2查看 2.9K关注 0票数 1

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

我有一段代码在没有Process.Refresh()调用的情况下工作得很好,但是我很好奇这是不是巧合?我可以看到一个msdn示例具有Process.Refresh()调用...

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

感谢您的回答。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-03 17:23:36

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

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

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

票数 6
EN

Stack Overflow用户

发布于 2010-05-03 17:27:32

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2756999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档