我有下面这段代码,它创建一个进程,附加到一个作业对象,最后在块中处理作业对象,然后是进程。我仍然遇到CA2000:DisposeObjectsBeforeLosingScope代码分析错误。有什么想法可以让我摆脱这个代码分析错误吗?
Process process = null;
JobObject processGroupLimitJobMemory = null;
try
{
// Code to create process,
// initialize job object and attach process to job object
// Code to create process and attach to job object
processGroupLimitJobMemory = new JobObject();
var process = new Process();
process.StartInfo = new ProcessStartInfo()
{
WorkingDirectory = @"c:\Windows\System32",
FileName = "notepad.exe",
Arguments = null,
UseShellExecute = false
};
process.Start();
processGroupLimitJobMemory.AttachProcess(process);
return;
}
catch (InvalidOperationException e)
{
return;
}
finally
{
if(processGroupLimitJobMemory != null)
{
processGroupLimitJobMemory.Dispose();
}
if (process != null)
{
try
{
if (!process.HasExited)
{
Utilities.KillProcessTree(process);
}
}
catch (InvalidOperationException e)
{
// Trace
}
catch (ExternalException e)
{
// Trace
}
finally
{
process.Dispose();
}
} 发布于 2015-01-22 04:43:21
在finally worked中,将进程的dispose移到JobObject的dispose之前
finally
{
if (process != null)
{
try
{
if (!process.HasExited)
{
Utilities.KillProcessTree(process);
}
}
catch (InvalidOperationException e)
{
// Trace
}
catch (ExternalException e)
{
// Trace
}
finally
{
process.Dispose();
}
}
if(processGroupLimitJobMemory != null)
{
processGroupLimitJobMemory.Dispose();
}
}https://stackoverflow.com/questions/28060121
复制相似问题