c# - 如果我使用 .Kill() 终止 System.Diagnostics.Process,我是否还需要调用 .Close()?

标签 c# .net process kill

我使用 C# 4.0 创建了一个 System.Diagnostics.Process,我希望它能在很短的时间内运行。如果由于某种原因进程在一段时间后没有退出(例如,我调用了 .WaitForExit(timeout) 并且返回值为 false),我需要清理。我决定在这种特殊情况下使用 .Kill() 是安全的(没有我担心损坏的数据结构)。

鉴于此设置,我是否还需要调用 Process 的 .Close() 方法?如果是这样,我应该在 .Kill() 之前还是之后调用 .Close()

最佳答案

System.Diagnostics.Process工具 IDisposable通过 Component类和 protected Dispose(bool)方法调用 Close() .通常认为在用完后释放一次性资源是一种很好的做法,因为这将立即释放与该类关联的所有资源(不必等待 GC 运行)。

所以回答你的问题:

是的,请调用Close()通过调用 Dispose()方法直接或通过 C# using构造如下。

using(Process proc = CreateProcess())
{
    StartProcess(proc);
    if (!proc.WaitForExit(timeout))
    {
        proc.Kill();
    }
}

关于c# - 如果我使用 .Kill() 终止 System.Diagnostics.Process,我是否还需要调用 .Close()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5642967/

相关文章:

c# - XAML中设置属性的顺序是什么?

C# - 跳过最后 X 行的 Linq 语句

c# - Windows 窗体应用程序,如具有多个进程的 Google Chrome

linux - 子进程是否复制整个数组?

c# - 如何在C#中获取Windows面板控件中的按键事件

C# Linq 删除 List 中包含的记录 []

.net - 将 Visual Studio for Mac 中的 .NET 项目连接到 Azure SQL Edge

.net - FormatException 未处理 vb.net

linux - 信号如何无法捕获(例如 sigkill)? Linux 的底层到底发生了什么?

c# - 参数前的@符号是什么