procédure 'handle' modifiant un Form : impossible?
Bonjour,
J'ai un projet VB2005 express comprenant un Form et une classe.
La classe 'DeviceWithSerial' contient un membre de type system.io.serial.port
Quand des données sont recues sur ce port série, une procedure 'handle' est appelée.
1/ Dans cette procédure je voudrais simplement recuperer les données dans le tampon du port série et les afficher dans un Textbox du Form.
Cela ne fonctionne pas ( champ texte vide )
2/ J'ai tenté d'écrire les données dans une variable Public String 'pos2' au niveau Form, cela ne fonctionne pas non plus ( chaine vide )
3/ Le seul moyen que j'ai trouvé est de stocker les données dans une variable de la classe 'pos1', et à partir d'un timer du Form recuperer le contenu de 'pos1' pour l'afficher dans le textbox.
Pourquoi les solutions 1/ et 2/ ne fonctionnent pas ? Est ce que çà a un rapport avec cette histoire de Form non 'threadsafe' ?
Voici 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 32 33 34 35 36 37
| Public Class Form1
Dim Dev1 As New DeviceWithSerial
Public Pos2 As String
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Call Dev1.InitialiserCommunication("COM3")
End Sub
Private Sub TimerRefresh_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TimerRefresh.Tick
Me.TextBox1.Text = Dev1.Pos1
End Sub
End Class
Public Class DeviceWithSerial
Private WithEvents Sp As New System.IO.Ports.SerialPort
Public Pos1 As String
Public Sub InitialiserCommunication(ByVal NomPort As String)
Sp.PortName = NomPort
Sp.BaudRate = "9600"
Sp.Parity = IO.Ports.Parity.None
Sp.StopBits = IO.Ports.StopBits.One
Sp.DataBits = 8
Sp.ReceivedBytesThreshold = 10
Call Sp.Open()
End Sub
Sub Reception(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles Sp.DataReceived
Dim bufferin() As Char = New Char(10) {}
Sp.Read(bufferin, 0, Sp.ReceivedBytesThreshold)
Pos1 = bufferin
Form1.Pos2 = bufferin
Form1.TextBox2.Text = bufferin
End Sub
End Class |
---------------------------------------------------------------------
Merci pour toute aide...