Bonjour,

Je développe actuellement une application qui communique avec une balance via le port RS232.

Pour cela j'ai créé une classe de Balance qui manipule un objet SerialPort.
La communication fonctionne bien. Les données sont bien récupérées.

Après avoir récupéré les données je souhaite les afficher dans un WinForm au travers d'un label. J'ai vérifié le label possède bien la bonne valeur dans sa propriété Text mais il n'est pas visible sur l'interface utilisateur (pourant le visible est a True). Il s'agit surement d'un problème de gestion de Thread mais je n'arrive pas a comprendre d'où cela provient.

Voici le code de ma classe Balance :

Code vb : 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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
 
Imports System.IO.Ports
Imports System.Windows.Forms
 
Public Class Balance
    Private comPort As SerialPort
 
    'control dans lequel on veux afficher le résultat'
    Private _display As Control
    Private Delegate Sub SetTextCallback(ByVal text As String)
 
 
    Public Property Display() As Control
        Get
            Return _display
        End Get
        Set(ByVal value As Control)
            _display = value
        End Set
    End Property
 
 
    'initialisation du port COM'
    Public Sub New()
        comPort = New SerialPort
        comPort.PortName = "COM1"
        comPort.Parity = IO.Ports.Parity.None
        comPort.BaudRate = 9600
        comPort.StopBits = IO.Ports.StopBits.One
        comPort.RtsEnable = True
 
        AddHandler comPort.DataReceived, AddressOf dataReceived
 
    End Sub
 
    'Ouverture du port COM'
    Public Sub Open()
        If Not comPort.IsOpen Then
            comPort.Open()
        End If
    End Sub
 
 
    'Fermeture du port COM'
    Public Sub Close()
        If comPort.IsOpen Then
            comPort.Close()
        End If
    End Sub
 
 
    'Demande de récupération de la pesé sur la balance'
    Public Sub Peser()
        comPort.Write("PRT" & Chr(13) & Chr(10))
    End Sub
 
    'Procédure éxécuté quand la balance répond'
    Private Sub dataReceived(ByVal sender As Object, ByVal e As SerialDataReceivedEventArgs)
        Dim mess As String = comPort.ReadExisting()
 
        'Permet de formater la valeur afin d enlever les caractère indésiable (signe, unité, blanc)'
        Dim nb As Integer
        For Each c In mess
            If Not Integer.TryParse(c, nb) Then
                If c <> "." Then
                    mess = mess.Replace(c, "")
                End If
            End If
        Next
        mess = mess.Trim
 
        'on souhaite afficher le résultat' 
        DisplayData(mess)
 
    End Sub
 
    'procédure qui permet affichage dans le control souhaité'
    Private Sub DisplayData(Text As String)
        If _display.InvokeRequired Then
            _display.Invoke(New SetTextCallback(AddressOf DisplayData), New Object() {(Text)})
        Else
            _display.Text = Text
        End If
    End Sub
 
 
End Class

Avez-vous une idée ?

Merci d'avance