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