没有WaitForExit()的using语句中的Process会发生什么?

时间:2014-12-04 17:59:23

标签: c# process idisposable using

在下面的示例中,如果代码离开using语句,它仍在运行,会发生什么?

using (var p = new Process())
{
    p.StartInfo.FileName = "c:\\temp\\SomeConsoleApp.exe";
    p.Start();
}

4 个答案:

答案 0 :(得分:9)

应该将系统上运行的操作系统进程与代表“句柄”的Process对象分离到程序中:

  • 该过程继续运行直至完成,或者您使用特定于操作系统的方法将其终止
  • Process对象被释放,因此您的程序无法再与操作系统进程交互。

Dispose()对象上调用Process方法不会终止操作系统进程。

答案 1 :(得分:1)

您可能知道using语句将调用Dispose方法,因此流程实例将为Disposed。

要与流程互动,请获取所需的与流程相关的信息Handle to the Process。 .Net框架内部保存Handle到进程并为您带来所有痛苦。处理将关闭流程Handle,因此您将无法以良好的方式使用Process对象。

最重要的是:你开始的过程没有任何反应,它就好像什么也没发生一样。真的什么都没发生,你刚丢失了门钥匙,并不代表房间被毁坏。

答案 2 :(得分:0)

进程将一直运行,直到您关闭它。它不会因为流程而死亡。对象范围结束。

答案 3 :(得分:0)

进程将继续运行。您可以将Process p移动到类成员并在OnStop中停止该进程,以确保如果exe变得混乱,您可以再次停止该服务。

protected override void OnStop()
{
    p.Kill();
}