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