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/