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 vb : 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
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 vb : 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
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.
Partager