Wait for a process to terminate

Wait for a process to terminate

You can use the VB.NET Shell command (in the Microsoft.VisualBasic namespace) to run an external process and wait for its termination, but you can get better control if you work directly with the Process class in the System.Diagnostics namespace. You can start a process with the Start static method (which returns a Process object), and then wait until the process exits by querying the WaitForExit instance method, which takes an optional timeout in milliseconds and returns True if the process has exited:

' run Word and wait until it exitsDim appexe As String = "C:Program FilesMicrosoft OfficeOfficeWinword.exe"' you can pass arguments to the process, if you need toDim wordProc As Process = Process.Start(appexe, "")' wait until Word exits, but display a message every secondDo Until wordProc.WaitForExit(1000)     Console.WriteLine("Waiting for Word to exit")Loop

You can also check whether another process is still running by querying the HasExited readonly boolean property.

There is also another method to get a notification when a process exits. You must set a handler for the Exited event and enable event raising by setting the EnableRaisingEvent property to True:

Dim exited As BooleanSub Main()    Dim appexe As String = _        "C:Program FilesMicrosoft OfficeOfficeWinword.exe"    Dim wordProc As Process = Process.Start(appexe, "")    AddHandler wordProc.Exited, AddressOf Process_Exited    wordProc.EnableRaisingEvents = True    ' do something else here    ' (in this example just a loop that waits until the process exits    Do        Threading.Thread.Sleep(100)    Loop Until exited    RemoveHandler wordProc.Exited, AddressOf Process_ExitedEnd SubPrivate Sub Process_Exited(ByVal sender As Object, ByVal e As EventArgs)    Console.WriteLine("Word has exited")    exited = TrueEnd Sub


Share the Post: