Comment séparer l'execution de deux backgroundworker
Bonjour,
Voila mnt depuis pas mal de temps je fais mes essais avec le backgroundworker , pour réaliser la communication avec le port série vers deux périphériques : voila le code :
Code:
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 26 27 28 29 30 31
|
'déclencher le bgw1
Private Sub AutoSingleToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AutoSingleToolStripMenuItem.Click
Me.BackgroundWorker1.RunWorkerAsync()
End Sub
'LABEL du 1er débitmètre
Private Sub SetTextBoxText(ByVal text As String)
Me.Label13.Text = text '.Substring(4)
End Sub
'LABEL du 2éme débitmètre
Private Sub DB2Text(ByVal text As String)
Me.Label14.Text = text '.Substring(4)
End Sub
Private Delegate Sub SetTextBoxTextDelegate(ByVal text As String)
Private Delegate Sub DB2TextDelegate(ByVal text As String)
'bgw1_do_work
Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
If com1.IsOpen = False Then
com1.Open()
End If
Do
com1.Write("!11,f" & ControlChars.Cr)
Me.Invoke(New SetTextBoxTextDelegate(AddressOf SetTextBoxText), com1.ReadLine() & ControlChars.CrLf)
com1.Write("!12,f" & ControlChars.Cr)
Me.Invoke(New DB2TextDelegate(AddressOf DB2Text), com1.ReadLine() & ControlChars.CrLf)
Loop
End sub |
Voila,jusqu'à là,mon programme fonctionne normalement, je reçois les données de mes deux périphériques.Pourquoi "do loop"? parce que je veux envoyer une requête à chaque fois et recevoir la donnée qui change en temps réel..voila
Mon problème c'est que ,je voulais ajouter 3 autres périphériques j'ai essayer la même syntaxe entre la boucle "do loop",en ajoutant les 3 requête , ,mais y'a un bug à chaque fois ,j'ai pas compris pk en revanche si j'essaye les 3 syntaxe DANS LA BOUCLE "DO LOOP" sans les deux anciennes requêtes ça fonctionne mais pendant un petit moment,...
c'est pour cela ,j'ai réfléchi à ajouter un 2ème Backgroundworker(bgw2) ,qui exécutera que les 3 autres requête, j'ai essayer d'utiliser les deux Bgw en même temps mais y'a tjrs ce problème de bug et chevauchement de données....
voila le programme du 2ème bgw:
Code:
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 26 27 28 29 30 31 32 33 34 35 36 37 38
|
'T1
Private Sub T1Text(ByVal text As String)
Me.Label16.Text = text
End Sub
'T2
Private Sub T2Text(ByVal text As String)
Me.Label18.Text = text
End Sub
'T3
Private Sub T3Text(ByVal text As String)
Me.Label19.Text = text
End Sub
Private Sub BackgroundWorker2_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker2.DoWork
Do
com1.Write("!13,f" & ControlChars.Cr)
Me.Invoke(New T1TextDelegate(AddressOf T1Text), com1.ReadLine() & ControlChars.CrLf)
com1.Write("!14,f" & ControlChars.Cr)
Me.Invoke(New T2TextDelegate(AddressOf T2Text), com1.ReadLine() & ControlChars.CrLf)
com1.Write("!15,f" & ControlChars.Cr)
Me.Invoke(New T3TextDelegate(AddressOf T3Text), com1.ReadLine() & ControlChars.CrLf)
Loop
End Sub
'executer bgw2
Private Sub AfficherTempératuresToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AfficherTempératuresToolStripMenuItem.Click
BackgroundWorker1.CancelAsync()
If com1.IsOpen Then
Me.BackgroundWorker2.RunWorkerAsync()
Else
com1.Open()
Me.BackgroundWorker2.RunWorkerAsync()
End If
End Sub |
mnt ,les questions sont :
1-comment arrêter le premier bgw1 pour exécuter le deuxième bgw2 séparément ?
j'ai un problème avec la boucle "do loop" je sais ,qui ne me permet pas de compléter la tache du bgw1,mais je peux pas faire autrement,...breff comment l'arrêter d'un coup si possible?
2-Es que le problème de chevauchement et réception de données,vient de la partie SOFT,es que y'a une quelconque erreur de programmation?
Voila merci d'avance pour vos réponses. :)