Bonsoir,
je n'ai pas toutes les réponses, mais avec un backgroundworker, il est assez facile d'envoyer des infos de façon régulière au thread principal.
C'est d'ailleurs, prévu par défaut d'envoyer au moins un int qui alimente une progressBar.
Voici un exemple ou on compte jusqu'à 10^9.
A chaque pour-cent d'avancement, on envoie la nouvelle valeur de la progressBar et une information utilisateur (un caractère).
A la fin, on envoie le résultat (un string)
Private Sub exempleBGW()
Dim bgw As New BackgroundWorker()
bgw.WorkerReportsProgress = True 'necessaire pour envoyer l'avancement du calcul
AddHandler bgw.ProgressChanged, AddressOf bgw_ProgressChanged
AddHandler bgw.DoWork, AddressOf bgw_DoWork 'abonne le BGW à la méthode qui fera le travail de fond.
AddHandler bgw.RunWorkerCompleted, AddressOf bgw_RunWorkerCompleted 'abonne le BGW à la méthode qui sera éxécutée quand le travail sera finit
bgw.RunWorkerAsync(1000000000.0) 'Démarre le travail de fond avec un paramètre
End Sub
Private Sub bgw_DoWork(ByVal sender As Object, ByVal e As DoWorkEventArgs)
Dim max As Integer = Convert.ToInt32(e.Argument)
Dim caracteres() As Char = {"A"c, "B"c, "C"c, "D"c, "E"c, "F"c, "G"c, "H"c, "I"c, "J"c, "K"c, "L"c, "M"c, "N"c, "O"c, "P"c, "Q"c, "R"c, "S"c, "T"c, "U"c, "V"c, "W"c, "X"c, "Y"c, "Z"c, "a"c, "b"c, "c"c, "d"c, "e"c, "f"c, "g"c, "h"c, "i"c, "j"c, "k"c, "l"c, "m"c, "n"c, "o"c, "p"c, "q"c, "r"c, "s"c, "t"c, "u"c, "v"c, "w"c, "x"c, "y"c, "z"c, "A"c, "B"c, "C"c, "D"c, "E"c, "F"c, "G"c, "H"c, "I"c, "J"c, "K"c, "L"c, "M"c, "N"c, "O"c, "P"c, "Q"c, "R"c, "S"c, "T"c, "U"c, "V"c, "W"c, "X"c, "Y"c, "Z"c, "a"c, "b"c, "c"c, "d"c, "e"c, "f"c, "g"c, "h"c, "i"c, "j"c, "k"c, "l"c, "m"c, "n"c, "o"c, "p"c, "q"c, "r"c, "s"c, "t"c, "u"c, "v"c, "w"c, "x"c, "y"c, "z"c}
For i As Integer = 0 To max - 1 'compte de zéro à la valeur passée en argument
Dim j As Double = i * 100.0 / max
If Math.Floor(i * 100.0 / max) = j Then
CType(sender, BackgroundWorker).ReportProgress(CInt(Convert.ToInt32(j)), caracteres(CInt(Convert.ToInt32(j)))) 'quand on avance d'un %, envoie l'information d'avancement et une information personnelle
End If
Next i
e.Result = "C'est fini!" 'définit un resultat
End Sub
Private Sub bgw_ProgressChanged(ByVal sender As Object, ByVal e As ProgressChangedEventArgs)
progressBar1.Value = e.ProgressPercentage
listBox1.Items.Add(e.UserState)
End Sub
Private Sub bgw_RunWorkerCompleted(ByVal sender As Object, ByVal e As RunWorkerCompletedEventArgs)
MessageBox.Show(CStr(e.Result))
End Sub
Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
exempleBGW()
End Sub
Par contre, je ne sais pas mettre le traitement en pause et y envoyer une info.
Cela est possible avec un thread "normal".
Mais là je ne maitrise pas.
Modérer m'amène à intervenir dans de nombreux posts, mais les seuls langages que je connaisses sont le C# et un peu de VB. Pour vos codes pensez à la coloration.
Réponse trouvée ->Question Résolue