IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Windows Discussion :

VB.NET Problème affichage Label suite a Invoke


Sujet :

Développement Windows

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 3
    Points : 5
    Points
    5
    Par défaut VB.NET Problème affichage Label suite a Invoke
    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

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 3
    Points : 5
    Points
    5
    Par défaut
    Résolu !!

    Il passait plusieur fois dans le dataReceived du coup les données était bonne au premier passage mais au deuxième la chaine était vide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Problème affichage form suite insertion Datagrid view (connection BDD Access)
    Par Christian8021 dans le forum VB.NET
    Réponses: 2
    Dernier message: 02/09/2014, 15h53
  2. Problème affichage label camembert
    Par Mathias77 dans le forum iReport
    Réponses: 3
    Dernier message: 22/03/2011, 13h45
  3. Problème affichage suite jointure
    Par xavier1977 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 12/07/2005, 15h00
  4. [VB.NET] Problème d'affichage de pls feuille !!
    Par omarfla dans le forum Windows Forms
    Réponses: 4
    Dernier message: 28/01/2005, 01h17
  5. [CR][ASP.NET] Problème d'affichage du rapport
    Par David.V dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 20/04/2004, 12h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo