如果我用.Kill()杀死System.Diagnostics.Process,我是否还需要调用.Close()?
使用C#4.0,我创建了一个System.Diagnostics.Process
,我希望它能够花费很短的时间来运行。 如果由于某种原因,该过程在一段时间后没有退出(例如,我已经调用.WaitForExit(timeout)
并且返回值为false
),我需要清理。 我已经决定在这种特殊情况下使用.Kill()
是安全的(没有数据结构我担心会破坏)。
鉴于此设置,我是否还需要调用Process的.Close()
方法? 如果是这样,我应该在.Kill()
之前或之后调用.Close()
.Kill()
吗?
System.Diagnostics.Process
通过Component
类实现IDisposable
,受保护的Dispose(bool)
方法调用Close()
。 在完成这些资源时,通常认为处理一次性资源是一种好习惯,因为这会立即释放与该类相关的任何资源(无需等待GC运行)。
所以回答你的问题:
是的,请通过直接调用Dispose()
方法或通过C# using
构造调用Close()
,如下所示。
using(Process proc = CreateProcess()) { StartProcess(proc); if (!proc.WaitForExit(timeout)) { proc.Kill(); } }
Process.Kill()
和Process.Close()
都在内部调用与进程关联的私有SafeProcessHandle对象上的Close()
。 但是, Process.Close()
也显式重置了其他几个内部成员。
由于Process实现了IDisposable
,因此在完成后应始终对其执行Close()
,或将其包装在using
块中。
上述就是C#学习教程:如果我用.Kill()杀死System.Diagnostics.Process,我是否还需要调用.Close()?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/956538.html