Bonsoir à tous,
J'ai écris un programme pour convertir des vidéos avec ffmpeg.exe et j'ai enfin réussi à lire les messages de sorties de ce processus. Le but est d'afficher la progression sur un formulaire "frmProgress" spécialement dédié à cet usage.

Problème :
1- J'arrive à afficher les messages de sorties dans la fenêtre Debug de Visual Studio mais je n'ai rien qui s'affiche dans mon formulaire frmProgress qui contient un RichTextBox.
2- Quelle est la méthode la plus propre pour passer les paramètres de progression à mon formulaire ?. Pour l'instant j'ecrits directement dans le RichTextBox pour faire des essais, par la suite je ferais une barre de progression + un label calculé à partir de la chaine de caractére retournée (voir ci-dessous).
3- Le processus me retourne un string toute les secondes environ du style :
"frame= 4169 fps= 81 q=39.0 size= 10513kB time=00:01:22.74 bitrate=1040.8kbits/s dup=2134 drop=0". Je pense faire une analyse cette chaine de caractère pour extraire la valeur 'frame' ou 'time' qui me servira d'indication de progression, la sortie se compose egalement d'autres chaines de caractères qui retourne par exemple quelques lignes d'erreurs (je vais devoir ignorer les chaines qui commence par Error:.....) est ce que c'est bien comme cela que l'on procède habituellement concernant ce principe d'extraction des infos de progression ?

Le code exécuté dés que je lance la conversion depuis le formulaire principal :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    Private Sub ShellExecute(ByVal ExeFile As String, CommandLine As String)
 
        Dim MonProcess As New Process
        AddHandler MonProcess.OutputDataReceived, AddressOf OutputDataReceived
        AddHandler MonProcess.ErrorDataReceived, AddressOf ErrortDataReceived
 
        MonProcess.StartInfo.FileName = ExeFile
        MonProcess.StartInfo.Arguments = CommandLine
        'MonProcess.StartInfo.WindowStyle = ProcessWindowStyle.Maximized
        MonProcess.StartInfo.CreateNoWindow = True        ' True
        MonProcess.StartInfo.UseShellExecute = False      ' False
        MonProcess.StartInfo.RedirectStandardOutput = True
        MonProcess.StartInfo.RedirectStandardInput = True
        MonProcess.StartInfo.RedirectStandardError = True
 
        MonProcess.Start()
 
        frmProgress.Show()
        MonProcess.BeginOutputReadLine()
        MonProcess.BeginErrorReadLine()
 
 
        MonProcess.WaitForExit()
        MonProcess.Close()
    End Sub
Les évenements pour capturer la sortie du processus :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
    Private Sub OutputDataReceived(sender As Object, e As System.Diagnostics.DataReceivedEventArgs)
        Try
            frmProgress.RichTextBox1.Text += e.Data.ToString
            frmProgress.RichTextBox1.Text += Environment.NewLine
            Debug.Print(e.Data.ToString)
        Catch ex As Exception
 
        End Try
 
    End Sub
 
    Private Sub ErrortDataReceived(sender As Object, e As System.Diagnostics.DataReceivedEventArgs)
        Try
            frmProgress.RichTextBox1.Text += e.Data.ToString
            frmProgress.RichTextBox1.Text += Environment.NewLine
            Debug.Print(e.Data.ToString)
        Catch ex As Exception
 
        End Try
 
    End Sub
Merci à tous pour votre aide.