C# 使用块使用进程
可能重复:C# 使用块使用进程,c#,process,coding-style,idisposable,using-statement,C#,Process,Coding Style,Idisposable,Using Statement,可能重复: 作为System.Diagnostics.Process继承自实现IDisposable的组件,我是否应该始终使用块创建一个流程 例如,这个…: using (var process = new Process()) { process.StartInfo.FileName = "some process.exe"; process.Start(); process.WaitForExit(); } …而不是这个: var process = new Pr
作为
System.Diagnostics.Process
继承自实现IDisposable
的组件,我是否应该始终使用块创建一个流程
例如,这个…:
using (var process = new Process())
{
process.StartInfo.FileName = "some process.exe";
process.Start();
process.WaitForExit();
}
…而不是这个:
var process = new Process
{
StartInfo = { FileName = "some process.exe" }
};
process.Start();
process.WaitForExit();
我这样问是因为我很少看到进程出现在使用块中;例如,for进程
不使用它。使用对象初始值设定项也很有帮助
如果我应该使用它,那么我应该去“改造”它到我现有的代码库吗
如果不这样做,会有什么后果?(假设在每种情况下都正确调用了WaitForExit()
)如果不使用或无法使用using(),则应确保在不再需要时处理流程变量
如果在类(而不是程序或方法)中使用流程变量,则该类应实现IDisposable,然后在其Dispose(bool)方法中调用_process.Dispose:
如果方法中没有_process字段,但只有一个过程变量,则必须在方法中处理它:
void MyMethod()
{
var process = ...
... use it here ...
process.Dispose();
}
MSDN示例是人为设计的。打开进程句柄的程序在启动进程后立即退出。当该程序退出时,它打开的所有句柄都将关闭
如果打开进程句柄,则应将其关闭。组件的Process.Dispose重写。Dispose只调用Process.Close。using语句简化了这一点。这是一般规则,但OP询问有关System.Diagnostics.Process
的具体信息。我要说的是,同样在Process的情况下,规则也适用。@rsenna-您是对的,但是,明确此规则可能会帮助其他不知道为什么要使用()应该在这种情况下使用。谢谢-没有看到这个问题。我同意这是相似的,但我特别询问的是Dispose()而不是Close()。但这里公认的答案比任何其他答案都好…:P“使用对象初始值设定项也很有帮助。”即使使用using
块,也可以使用对象初始值设定项。我知道这个问题已经很老了,但我用.NET2.0测试了这个问题,至少在很久以前它还可以正常工作。
void MyMethod()
{
var process = ...
... use it here ...
process.Dispose();
}