进程与使用块的使用
本文关键字:进程 | 更新日期: 2023-09-27 17:54:05
可能重复:
如果我不这样做会发生什么;t关闭C#控制台应用程序中的System.Diagnostics.Process?
由于System.Diagnostics.Process
继承自实现IDisposable
的Component
,我是否应该始终创建一个带有using
块的Process
?
例如,这个…:
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();
我问是因为我很少看到Process
出现在using
块中;例如,Process
的MSDN页面没有使用它。使用对象初始值设定项也很有帮助。
如果我应该使用它,那么我应该去"改装"它到我现有的代码库吗?
如果不这样做会有什么后果?(假设WaitForExit()
在每种情况下都被正确调用。(
如果不使用或不能使用using((,则应确保在不再需要过程变量时对其进行Dispose。
如果在类(而不是程序或方法(中使用过程变量,则该类应实现IDisposable,然后在其Dispose(bool(方法中调用_process.Dispose:
void Dispose(bool disposing)
{
...
if (_process != null)
{
Dispose(_process);
}
}
如果没有_process字段,而只有您在方法中使用的过程变量,则必须在方法内部处理它:
void MyMethod()
{
var process = ...
... use it here ...
process.Dispose();
}
如果打开进程句柄,则应将其关闭。Component.Dispose的process.Dispose重写只调用process.close。using语句简化了这一过程。