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
Partager