Bonjour à tous,

j'ai cherché des solutions à mon problème, mais elles ne me semble pas adaptées.


L'envoie de 2Ko de données sur le SerialPort étant lourd, j'ai décidé de faire un BGW pour garder la main sur l'application. J'enverrai les données puis attendrais que l'on demande l'arrêt du BGW. (J'ai testé de mettre la commande d'arrêt dans un RunWorkerCompleted, mais ça ne marche pas..)
Seulement, je coince à l'arrêt du BGW :

Dans mon thread principal, j'ai codé quelques lignes :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
           For i = 1 To 2
                   FlagBGK = False
                   If BackgroundWorker1.IsBusy Then
                       BackgroundWorker1.CancelAsync()
                       BackgroundWorker1.Dispose()
                   End If
                   BackgroundWorker1.RunWorkerAsync(tbl(i))
 
                   While (FlagBGK = False)
                   End While
 
            Next
Avant d'envoyer, je regarde si le BGW est occupé, si oui, je demande l'arrêt de celui-ci.


Dans mon DoWork :

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
 Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
 
       Dim worker As BackgroundWorker = CType(sender, BackgroundWorker)
 
        WriteRS232(CStr(e.Argument))
 
        FlagBGK = True
 
        While (True)
            If worker.CancellationPending Then
                e.Cancel = True
                Exit Sub
            End If
        End While
End Sub



Lorsque je demande l'arrêt du BGW, je passe bien dans les instructions "e.Cancel" et "Exit Sub".
Pourtant, à la sortie, si je regarde si mon BGW.IsBusy, j'ai un true.
Quelqu'un sait pourquoi?

Merci d'avance de votre aide!