2009-08-14 86 views

回答

2

请阅读http://msdn.microsoft.com/en-us/library/system.diagnostics.process.start.aspx。过程启动后,Process.Start将返回。如果你想等到进程退出,那么你需要调用WaitForExit。

请注意,如果您重定向StandardOutput和StandardError并调用WaitForExit,则存在潜在的死锁问题。如果您没有读取StandardOutput和StandardError的流,那么缓冲区可以填充并且进程将被阻塞。因此WaitForExit永远不会返回。通常的解决方案是对线程池线程中的StandardOutput和StandardError调用ReadToEnd,并在主线程上调用WaitForExit。

+0

在调用Process.Start()之后调用Process.GetProcessById(PID)是否安全?我的意思是,我保证GetProcessById会一直返回正确的结果吗?当然,假设启动过程在启动 – Adi 2012-08-22 10:05:18

+0

道歉后没有立即关闭,我现在只看到了这条评论。迟到1年仍然有用,对吧?无论如何,Process.Start之后的GetProcessById应该没问题,但是现在有一个竞争条件,并且在调用GetProcessById之前依赖于该过程尚未完成。在调用GetProcessById之前,它可能会完成而不会失败。但更重要的是,如果您使用Process.Start启动流程,它会将Process对象返回给您 - 您无需从GetProcessById中获取它。在这种情况下,您仍然可以在Process对象完成后询问它们(例如退出代码)。 – 2013-10-14 00:04:57

0

一旦Process.Start启动的应用程序启动(或启动失败),控制权就会返回到您的应用程序。