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

Windows Forms Discussion :

Opération inter-threads non valide


Sujet :

Windows Forms

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 39
    Points : 33
    Points
    33
    Par défaut Opération inter-threads non valide
    Bonjour à toutes et à tous,

    J'ai un petit un problème, voila j'ai un timer qui toutes les 10 secondes lance un événement qui est sensé mettre à jour un label et c'est là que mon problème survient :

    Opération inter-threads non valide : le contrôle 'labelSolution' a fait l'objet d'un accès à partir d'un thread autre que celui sur lequel il a été créé.
    voici le code de mon événement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    labelSolution.Text = laSolution.ToString();
    Je vous remercie pour l'aide que vous pourrait m'apporter.

  2. #2
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    labelSolution.Invoke(new MethodInvoker(delegate
    {
        labelSolution.Text = laSolution.ToString();
    }));

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 39
    Points : 33
    Points
    33
    Par défaut
    Merci çà marche, mais maintenant des que je quitte la form
    j'ai ce message :

    Impossible d'appeler Invoke ou BeginInvoke sur un contrôle tant que le handle de fenêtre n'a pas été créé.
    Sais tu d'où çà vient ?

  4. #4
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Là ça demande éclaircissement.
    L'erreur vient du fait que l'on ne peux accéder à un contrôle WinForms qu'à partir du thread qui l'a crée et donc le this.Invoke ou Control.Invoke se charge de faire la transition afin d'exécuter le délégué passé en paramètre dans le bon thread.
    Par contre, cette méthode nécessite que le contrôle ai actuellement un Handle valide c'est à dire basiquement qu'il doit être crée et affiché. On peut y remédier en appelant this.CreateControl ou this.CreateHandle sur le contrôle parent (la fenêtre) afin d'être sur que le Handle soit effectivement crée et remplacer le labelMachin.Invoke par this.Invoke (en supposant que ce soit exécuté dans la classe de ta fenêtre).

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 39
    Points : 33
    Points
    33
    Par défaut
    Houla, merci bon je vais me renseigner sur tout çà,
    je t'avoue qu'a la base je voulais seulement faire un petit chronomètre qui toutes les 10seconde m'incremente une variable et donc un label.
    Je ne pensais pas qu'une petite action du genre serait si compliqué !

    Je te remercie !

  6. #6
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Ah bah ça doit être ça. Pour faire ton chronomètre tu dois utiliser un Timer ou un autre truc du genre ... sauf qu'il reste actif après que la form ai été fermée. Donc AVANT la fermeture de ta form (event Closing) arrête ton timer.

Discussions similaires

  1. Réponses: 4
    Dernier message: 11/03/2014, 19h53
  2. [Débutant] Opération inter-threads non valide
    Par Conscious Ape dans le forum C#
    Réponses: 6
    Dernier message: 12/02/2013, 14h59
  3. Opération inter-threads non valide VB.NET
    Par airemax dans le forum VB.NET
    Réponses: 2
    Dernier message: 01/05/2011, 11h51
  4. Accès inter-threads non valide et BitmapImage
    Par Louis745 dans le forum Silverlight
    Réponses: 6
    Dernier message: 31/10/2010, 16h16
  5. Erreur : Opération inter-threads non valide
    Par cadeau dans le forum C++/CLI
    Réponses: 1
    Dernier message: 12/12/2006, 09h07

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