我是否必须处理Process.Start(url)?

Mic*_*tum 14 .net c#

简单的问题:我想使用默认浏览器打开一个URL,所以我就这样做了Process.Start(url).但是,我注意到这会返回一个IDisposable对象.

所以现在我想知道我是否必须处理它?或者,就此而言,如果我的应用程序以任何方式负责此过程?预期的功能只是"消防而忘记",我不希望我的应用程序作为新进程的父进程而且不需要与它进行交互.

我在SO上看到了一些类似但不相关的问题似乎只是说在URL上调用Process.Start很好,但我不想遇到一些难以调试的内存泄漏/资源耗尽问题导致我的程序保持不变引用长时间的浏览器进程.

Tru*_*ill 11

你不可以.

void Main()
{
    Process result = Process.Start("http://www.google.com");

    if (result == null)
    {
        Console.WriteLine("It returned null");
    }
}
Run Code Online (Sandbox Code Playgroud)

打印

It returned null

来自MSDN(.NET Framework 4)上的Process.Start方法(字符串):

如果要启动的可执行文件的地址是URL,则不会启动该进程并返回null.

(一般来说,该using语句是使用IDisposable对象的正确方法.除了WCF客户端.)


小智 10

难道你不能把它包装在一个using子句中,以确保GC做任何它需要处理它如果你需要处理它吗?这仍然会允许一种"火上浇油",但不会让内存/资源处于不良状态.

可能有点矫枉过正,但关于IDisposable接口的CodeProject上有一篇非常好的文章:http://www.codeproject.com/KB/dotnet/idisposable.aspx


Mat*_*att 6

启动进程是一个本机调用,它返回一个本机进程句柄,该句柄存储在返回的Process实例中.Process中有一些方法可以使用句柄,因此您可以执行等待进程退出或空闲的操作.

处理进程可释放该进程.我同意Jon,将其包含在using子句中.