.net - 不调用 Process.Close() 是否存在重大问题?

标签 .net system.diagnostics

System.Diagnostics.Process 类是否需要 Close() 方法?

编辑:进程正在监视一个控制台应用程序,该应用程序几乎立即终止...

比利3

最佳答案

但请注意,Close 仅与释放应用程序本地资源有关。它不会尝试终止该进程。为此,您必须调用 CloseMainWindow()(对于 GUI 应用程序)或 Kill()(对于任何应用程序)。

Process 类实现了 IDisposable,严格来说,它要求您在完成对象后调用 Dispose。但是,对于许多这样的类,Dispose 方法的面向公众的版本是 Close

处理此类对象的最简单(也是最可靠)的方法是使用 using block 。一旦到达 block 的末尾,就会自动对变量调用Dispose。它还可以保护您免受异常情况的影响,从而阻止您处置该对象。

例如:

using(System.Diagnostics.Process process = new System.Diagnostics.Process())
{
    // set your properties and launch it
    // wait for it to exit if you want to, or just let it continue to run
}

这在功能上等同于这样做:

System.Diagnostics.Process process = new System.Diagnostics.Process();

try
{
    // set your properties and launch it
    // wait for it to exit if you want to, or just let it continue to run
}
finally
{
    process.Close();
}

(请注意,我说的是功能上等效,而不是语义上等效;实际上,using block 将其自己的对象句柄作为 IDisposable 维护,然后调用 Dispose,而不是Close。但是,这与这个问题无关。)

关于.net - 不调用 Process.Close() 是否存在重大问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3134141/

相关文章:

c# - NHibernate Collection 集合获取、重复数据

c# - 使用反射区分重载方法的泛型和非泛型版本

c# - 如何通过辅助方法打印当前执行的方法名?

Log4net traceappender 不记录任何内容

c# - CounterSample 中的时间字段是什么意思?

.net - 我可以在 .NET 中使用 "System.Currency"吗?

.net - 如何验证 .net 框架是否存在,如果不存在如何将其安装在用户计算机上

c# - 如何为此代码编写 LINQ to objects 等效代码

c# - 尝试使用 C# 执行命令行脚本时出现 System.InvalidOperation 异常

c# - 在我的 C# Win 应用程序中打开 Windows 的计算器?