g t*_*g t 12 c# coding-style idisposable process using-statement
作为System.Diagnostics.Process继承来自Component哪个实现IDisposable,我应该总是创建一个Process带using块吗?
例如,这......
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()在每种情况下都被正确调用.)
如果您不使用或不能使用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)
| 归档时间: |
|
| 查看次数: |
9237 次 |
| 最近记录: |