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

VB.NET Discussion :

Problème avec le Handles


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 156
    Par défaut Problème avec le Handles
    Bonjour à vous tous

    j'ai une application qui est censé récupérer la lecture d'un data matrix par usb émulation PortCom.
    Rien de bien compliqué, me direz vous. Mais la ou cela bloque c'est qu'au moment d'afficher la lecture j'ai l'erreur suivante :

    Impossible d'appeler Invoke ou BeginInvoke sur un contrôle tant que le handle de fenêtre n'a pas été créé.

    voici mon code :

    IHM.vb
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
           General.Init_Post()
    End Sub
    General.vb
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        Public Shared Sub Init_Post()
            'Lecture du fichier de config
            Dim strConfigFileName As String = IHM.strPathRootConfig & "\Config.ini"
            Dim str_ScannerComPort As String = ""
     
            'Port com pour la douchette
            str_ScannerComPort = Gestion_INI.GetCle(strConfigFileName, "Poste", "ScannerComPort")
     
            'Init comm douchettes
            Douchette.Init_douchettes(str_ScannerComPort)
     
        End Sub
    Douchette.vb
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
        'Gestion des ports com pour les douchettes
        Public WithEvents portCom As New System.IO.Ports.SerialPort
     
        Public Function Init_douchettes(ByVal strPort As String) As Boolean
            Try
                'Si le nom est vide -> pas d'ouverture
                If strPort <> "" Then
                    If Me.portCom.IsOpen = False Then
                        'Init des parametres
                        portCom.BaudRate = 38400
                        portCom.Parity = IO.Ports.Parity.None
                        portCom.Handshake = IO.Ports.Handshake.None
                        portCom.StopBits = IO.Ports.StopBits.One
                        portCom.PortName = strPort
     
                        'Initialise le buffer
                        portCom.DiscardNull = True
     
                        'Ouverture
                        portCom.Open()
                    End If
                End If
            Catch ex As Exception
                MsgBox("Erreur dans la configuration de la douchette." & vbCrLf & ex.Message)
            End Try
        End Function
     
        'Gestion reception code barre douchette
        Public Sub Reception_Data(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles portCom.DataReceived
     
            Dim strTmp As String = ""
     
            Try
                If portCom.ReadBufferSize > 0 Then
     
                    'Recupere les donnees
                    strTmp = portCom.ReadExisting
     
                    'Vide le buffer
                    portCom.DiscardInBuffer()
     
                    'Affichage de la trame reçu
                    TextBox1.Invoke(New AfficheDataReadDeleg(AddressOf AfficheDataRead), New Object() {strTmp})
                End If
            Catch ex As Exception
                MsgBox("Erreur durant la réception" & vbCrLf & vbCrLf & ex.ToString)
            End Try
        End Sub
     
        'Création d'une délégation pour gestion des threads pour l'affichage
        Delegate Sub AfficheDataReadDeleg(ByVal StrTmp As String)
     
        'affichage de la trame reçu
        Public Sub AfficheDataRead(ByVal StrTmp As String)
            TextBox1.Text = StrTmp
        End Sub
    Ligne ou j'ai le blocage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'Affichage de la trame reçu
     TextBox1.Invoke(New AfficheDataReadDeleg(AddressOf AfficheDataRead), New Object() {strTmp})

  2. #2
    Invité
    Invité(e)
    Par défaut
    Le message est très clair je pense le handle n'est pas créé donc pas de possibilité d'appeler Invoke ou BeginInvoke sur contrôle.

    Sinon tu peux faire un test sur la propriété InvokeRequired qui te renvoie True si tu peux appeler les méthodes citées précédemment.

  3. #3
    Invité
    Invité(e)
    Par défaut
    T'as aussi la proprieté IsHandleCreated qui te permet de savoir si un handle associé à un contrôle.

    Bref évite surtout de vouloir faire des traitements dans le gestionnaire Form_Load de ton formulaire. Privilégie les lancements de traitements dans des Threads indépendants.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 156
    Par défaut
    InvokeRequired est à False
    tout comme IsHandleCreated

  5. #5
    Invité
    Invité(e)
    Par défaut
    Essaies de gérer l'évènement Shown (et d'y mettre ton traitement.

    d'après MSDN :
    Shown se produit à chaque fois que le formulaire est affiché en premier.

    L'événement Shown est déclenché uniquement la première fois qu'un formulaire est affiché ; les opérations consistant à réduire, agrandir, restaurer, masquer, afficher, ou invalider et repeindre ne déclencheront pas cet événement.
    En gérant cet évènement on est sûr que tes contrôles possèdent des Handle associés.

    Nota Béné : Encore une fois ça fait pas parti des bonnes pratiques.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 156
    Par défaut
    Même en lancant dans le Shown, sa ne change rien

  7. #7
    Invité
    Invité(e)
    Par défaut
    Désolé passe par la bonne pratique en utilisant un BackgroundWorker.

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

Discussions similaires

  1. [integral] Problème avec fonction handle
    Par Gazelle Arctique dans le forum MATLAB
    Réponses: 7
    Dernier message: 04/02/2014, 17h18
  2. Problème avec un handles
    Par cococococococo dans le forum Interfaces Graphiques
    Réponses: 6
    Dernier message: 26/06/2007, 13h12
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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