使用块使用Process

g t*_*g t 12 c# coding-style idisposable process using-statement

可能重复:
如果我不在我的C#控制台应用程序中关闭System.Diagnostics.Process会发生什么?

作为System.Diagnostics.Process继承来自Component哪个实现IDisposable,我应该总是创建一个Processusing块吗?

例如,这......

using (var process = new Process())
{
    process.StartInfo.FileName = "some process.exe";
    process.Start();
    process.WaitForExit();
}
Run Code Online (Sandbox Code Playgroud)

......而不是这个:

var process = new Process
    { 
        StartInfo = { FileName = "some process.exe" }
    };
process.Start();
process.WaitForExit();
Run Code Online (Sandbox Code Playgroud)

我问,因为我很少见到Process出现在using街区; 例如MSDN页面Process不使用它.使用对象初始化程序也很有帮助.

如果我应该使用它,那么我应该去"改造"它到我现有的代码库吗?

如果没有这样做会有什么后果?(假设WaitForExit()在每种情况下都被正确调用.)

Roy*_*tus 6

如果您不使用或不能使用using(),则应确保在不再需要时处理流程变量.

如果在类(而不是程序或方法)中使用流程变量,那么该类应该实现IDisposable,然后在其Dispose(bool)方法中调用_process.Dispose:

void Dispose(bool disposing)
{
    ...
    if (_process != null)
    {
        Dispose(_process);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果没有_process字段但只有您在方法中使用的过程变量,则必须在方法内部处理它:

void MyMethod()
{
    var process = ...
    ... use it here ...
    process.Dispose();
}
Run Code Online (Sandbox Code Playgroud)