创建流程后如何处理流程

本文关键字:处理 创建 何处理 | 更新日期: 2023-09-27 18:26:27

引用"如何在chrome隐身模式下打开URL"问题的答案:

我写了这个,它很成功:

Process.Start(@"chrome.exe", "--incognito http://domain.com");

有人回复说:

您需要处理对象,否则会发生内存泄漏

我通常使用Process.Start创建许多进程,但从不"处理"它们。这是什么?我该怎么做?

创建流程后如何处理流程

根据MSDN上的Component文章,这是正确的。您应该在使用后释放Process对象,释放任何非托管资源(应用程序不会关闭)。

组件应通过调用其Dispose方法显式释放资源,而无需通过隐式调用Finalize方法等待自动内存管理。当容器被处置时,容器中的所有组件也被处置。

来自Process的文章:

此类型实现IDisposable接口。使用完该类型后,应直接或间接处理它。若要直接处置该类型,请在try/catch块中调用其dispose方法。若要间接处理它,请使用诸如using(在C#中)或using(在Visual Basic中)之类的语言构造。有关更多信息,请参阅IDisposable接口主题中的"使用实现IDisposaable的对象"部分。

Process来源于Component,所以你应该处理它。它很简单:

Process myProc = Process.Start(@"chrome.exe", "--incognito http://domain.com");
myProc.Dispose();

甚至更容易

using (Process myProc = Process.Start(@"chrome.exe", "--incognito http://domain.com"))
{
   //Do whatever with the process
}

当块退出时,using块将处理对象。

使用Process.Close();

var Pro = new Process();
Pro.Start(@"chrome.exe", "--incognito http://domain.com");
Pro.WaitForExit(); //optional
Pro.Close();