Attendre la fin d'un process externe avant de faire autre chose

Description

Voila, j'avais besoin de tester si un log (wordpad dans mon exemple) n'était plus en exécution avant de faire d'autre trucs.
seulement, wordpad est lancé extérieurement à VB, donc ce qui est FindWindow & Co ne marchait pas...

j'ai donc mixé des ptites choses, et trifouillé dans mon cerveau, et voila....assez ptit, et simple d'utilisation...
étant débutant, il y auras surement moyen de l'améliorer, mais pour moi, il est nikel ;-)

Source / Exemple :


Imports System.IO

Public Class Form1
    Private Declare Function Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) As Long
	
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim pID As String 'Sert à stocker le PID de référence
        Dim pID2 As String 'Sert à stocker le PID de test
        Dim FoundProcess As Process

        If Label1.Text = 5 Then
            Try
                FoundProcess = Process.GetProcessesByName("Wordpad")(0)  ' on cherche un process nommé Wordpad
                Label5.Text = FoundProcess.Id.ToString()  ' on l'affiche dans le label5
            Catch Ex As Exception
                End   ' si on a pas trouvé le process Wordpad, bin on se casse :-p
            End Try
        End If

        pID = Label5.Text   ' Remplissage de la var pID
        pID2 = Label5.Text  ' Remplissage de la var pID2

        If Label1.Text = 3 Then
            While pID = pID2 ' Si pID et pID2 sont pareil
                Try
                    FoundProcess = Process.GetProcessesByName("Wordpad")(0)
                    pID2 = FoundProcess.Id.ToString()   ' si Wordpad est toujours en exécution, on rempli à nouveau pID2 avec son PID
                    Sleep(3000)  'attend 3sec entre chaque test
                Catch Ex As Exception
                    pID2 = 0  ' si Wordpad n'est plus en exécution, alors on rempli pID2 avec 0
                End Try
            End While
        End If

        If Label1.Text = 1 Then
			Timer1.Enabled = False
            MessageBox.show ("WordPad est fermé...")  'ptit message histoire de voir que mon script à vu que Wordpad était fermé :-D
			Timer1.Enabled = True
        End If

        If Label1.Text = 0 Then
            End  ' A++
        End If

        If Label1.Text > 0 Then
            Label1.Text = (Label1.Text - 1)  'faut bien descendre le compteur de 1 à chaque tour ;-)
        End If
    End Sub
End Class

Conclusion :


Voilà les gens, y a plus qu'à se servir ;-)

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.