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 :

Opération interThread non valide sur objet interface


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Mai 2002
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 163
    Par défaut Opération interThread non valide sur objet interface
    Bonjour,

    Je suis sur une petite appli toute simple, d'un coté, un lecteur code barre en émulation port comm, de l'autre, une imprimante d'étiquette...

    Sur un formulaire, un SerialPort et un bouton (Bp_imprimer)

    Je cherche a rendre Enable le bouton de mon formulaire sur SerialPort1_DataReceived() puis disable du bouton sur Bp_imprimer_Click (pour ne permettre d'imprimer une étiquette qu'une seul fois après lecture d'un code avec la douchette)

    Le problème étant l'exception généré "InvalidOperationException"
    (la même que dans le cours suivant)
    http://plasserre.developpez.com/cour...-forms5#LX-R-2
    Je pensais passé par un BackGroundWorker, mais comme dit dans l'exemple du cours, a priori, j'aurais le même problème !!!

    J'ai trouvé une parade qui consiste a passer un booléen (public) a Vrai dans la procédure SerialPort1_DataReceived() et a utiliser un timer sur le formulaire qui réaffecte le booléen à la propriété Enable du bouton ... ça marche, mais c'est pas propre !!!

    Y'a t-il une autre solution ?
    (je commence juste a passé de VB6 à .Net)

  2. #2
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Pour éviter l'exception, on peut appeler une méthode du formulaire par un appel de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // Dans la Form, un exemple de méthode (à adapter)
    internal string MyMethod(string Param1,int Param2) { MyLabel.Text=Param1 ;  return Param1+Param2.ToString() ; }
     
    // Pour appeler la methode MyMethod (dont le but sera de mettre à jour l'IHM de la form)
    string MyResult ;
    string MyParam1 = "XXX" ;
    int MyParam2 = 1234 ;
    MyForm.Invoke((MethodInvoker) delegate { MyResult=MyForm.MyMethod(MyParam1,MyParam2) ; } ) ;

  3. #3
    Membre éprouvé
    Inscrit en
    Mai 2002
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 163
    Par défaut
    Merci à toi, je vais essayer ça de suite !

    Je mets pas de suite résolu, j'attends de voir si d'autres méthodes / astuces existent ...

  4. #4
    Membre éprouvé
    Inscrit en
    Mai 2002
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 163
    Par défaut
    ça marche très bien ...
    voici un bout de mon code en VB pour ceux que ça intéresse :

    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
     
    Public Class Form1
        Delegate Sub mon_traitement(ByVal machaine As String)
        Public MaSubDeleguee As mon_traitement
     
        Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
            '...
            MaSubDeleguee = New mon_traitement(AddressOf traitement_lecture_port_comm)
            '...
        End Sub
     
        Private Sub SerialPort1_DataReceived(sender As Object, e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
            Dim machaine As String
            machaine = SerialPort1.ReadExisting
            Me.Invoke(Me.MaSubDeleguee, machaine)
        End Sub
     
        Public Sub traitement_lecture_port_comm(ByVal valeur_lue As String)
            '...
            Bp_imprimer.Enabled = True
            '...
        End Sub
    End Class
    Merci encore !

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

Discussions similaires

  1. NameSpaces non valide sur Office Open
    Par Heureux-oli dans le forum XML/XSL et SOAP
    Réponses: 8
    Dernier message: 07/01/2008, 10h55
  2. "Argument non valide" sur requête
    Par KEROZEN dans le forum Access
    Réponses: 4
    Dernier message: 15/08/2007, 20h35
  3. Erreur, argument non valide sur IE
    Par Babssss dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/03/2007, 07h08
  4. Methode non trouvé sur objet Graphics2D
    Par staive dans le forum 2D
    Réponses: 14
    Dernier message: 26/10/2005, 10h01
  5. [JDBC] Opération non valide sur un ensemble
    Par marti dans le forum JDBC
    Réponses: 2
    Dernier message: 13/10/2005, 19h17

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