Bonjour,
Voila j'ai établie ce programme avec VB.net, pour lire une valeur de variation d'un débit d'un gaz sur un capteur qui est un débitmètre.
Pour communiquer avec ce débitmètre, il faut envoyer une requête, une adresse qui est du genre "!11,f" ,elle dépend du protocole au fait, bref....
Quand j'utiliser les instruction simple sur vb ,write et read, j'avais un problème, qui était que mon interface se figeait,et les auutre fonctionnalité sur l'interfae ne répondait pas tel un button ,textbox,.....c'est pour cela j'ai utiliser une autre solution qui est "backgroundworker" ,qui permet d'executer mes lecture et écriture du port en arrière plan quoi,....sans que l'interface se fige
Donc voila le programme, aprés je mettrai mes autres questions si vous le permettrez :
ça c'est la déclaration d'un chemin qui relie le label du premier thread à l'instruction de lecture de donnée du 2éme thread
Private Delegate Sub SetTextBoxTextDelegate(ByVal text As String)
ça c'est l'affichage de ma valeur sur un label
1 2 3
| Private Sub SetTextBoxText(ByVal text As String)
Me.Label13.Text = text.Substring(4)
End Sub |
ça c'est l'execution de mon code sous l'instruction backgroundworker
1 2 3 4 5 6 7 8 9 10 11 12
| Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
Do
com1.Write("!11,f" & ControlChars.CrLf)
Me.Invoke(New SetTextBoxTextDelegate(AddressOf SetTextBoxText), com1.ReadLine())
Loop
End Sub
'Normalement l'arrêt du programme ?! mais ça ne marche pas
Private Sub terminus(ByVal sender As System.Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
BackgroundWorker1.CancelAsync()
End Sub |
Voila jusqu'à là,je reçois le plus normalement les données affichées sur mon label13
Les questions sont :
1.Pourquoi je peux pas tout simplement arrêter mon backgroundworker ,même en utilisant la portion du code citer précédemment?
2.j'ai ajouter d'autres instructions write et read, dans le même backgroundworker, mais ça répond pas en même temps que les précédant ? normalement ça peut se faire ?
3.comment utiliser l'instruction "System.Threading.Thread.Sleep",pour mettre en pause le backgroundworker?
Voila merci de vos réponses.
Partager