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.