vb.net检查我开始的进程是否完成

时间:2013-08-12 01:55:29

标签: vb.net

我已经开始了一个过程:

Dim getUdpate as Process
getUpdate = New Process
getUpdate.StartInfo.FileName = "C:\UTIL\GETBTCH.BAT"
getUpdate.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
getUpdate.StartInfo.UseShellExecute = False
getUpdate.StartInfo.WorkingDirectory = "C:\UTIL\"
getUpdate.Start()
getUpdate.Close()

然后,我想运行另一个进程,但我想首先检查getUpdate进程是否已经完成。

如何检查流程是否已完成?

我已经尝试查看进程ID,但它只显示cmd.exe,并且有很多cmd.exe作为进程ID,因此我不能只停止所有这些。

3 个答案:

答案 0 :(得分:5)

您可以查看流程的HasExited属性。如果进程结束,它将返回true,如果它仍在运行,则返回false。

Close()进程对象上调用getUpdate之前,您需要先检查一下。所以getProcess必须保持开放,直到众议院退出。

答案 1 :(得分:2)

尝试:

getUpdate.WaitForExit();而不是

getUpdate.Close()

答案 2 :(得分:0)

如果您正在制作WinForms应用程序或类似的交互式UI,我建议将函数挂钩到对象的Exited事件而不是轮询HasExited

(您可能已经知道了这一点但是)如果您使用WaitForExit或轮询HasExited您的用户界面正好悬挂,因为您的代码实际上正在等待流程结束。

您的用户界面只有一个线程,无法执行多任务"。这就是为什么这些"处理"操作类型应该在不同的线程中完成(或者,就像这里的情况一样,是一个不同的过程),并在完成后向UI报告。

示例:

' Handle Exited event and display process information.
Private Sub myProcess_Exited(ByVal sender As Object, ByVal e As System.EventArgs)
    'Do something in your UI
End Sub

并在您的起始代码中:

getUpdate.EnableRaisingEvents = True
AddHandler getUpdate.Exited, AddressOf myProcess_Exited