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

C# Discussion :

Communication entre une classe et un thread


Sujet :

C#

  1. #1
    Membre éprouvé Avatar de cs_ntd
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2006
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 598
    Points : 1 214
    Points
    1 214
    Par défaut Communication entre une classe et un thread
    Bonjour à tous !

    Je suis certain que mon problème a été traité des centaines de fois mais je ne trouve pas la réponse .

    Voici le problème : Dans une application winform, dans la classe de base de ma form (form1), je lance un thread (par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new Thread(new ThreadStart(new traitement(données).Run)).Start();
    ). A partir de là, deux choses :

    1) Si "données" est défini en tant que "public type" dans "form1", puis-je les récupérer sans avoir à les passer comme argument pour le constructeur de "traitement" ?

    Mais SURTOUT :
    2)"form1" possède une textbox (textbox1) dans laquelle je souhaite afficher les résultats de "traitement.Run()". Comment puis-je faire ???

    Je vous suis EXTREMEMENT (si si ) reconnaissant pour toutes vos réponses, idées, conseils ou autre

    The magic of Opera, La magie de l'Opera
    The mysteries of Space Opera, Les mystères de l'Opera Spatial
    Mr. Know-it-all, M. Je-Sais-Tout
    Prelude in C sharp minor, the most beautiful piano song and the best C sharp prelude ever, Prélude en do dièse mineur, le plus beau morceau de piano et le meilleur prélude au C#
    The Mesmerizing Saphir Division for Nerds, L'Hypnotisante Division Saphire pour les Nerds (HDSN)

  2. #2
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Points : 14 357
    Points
    14 357
    Par défaut
    Salut cs,

    Alors les threads et l'accès à une fenêtre, combien de fois ais-vu des discussions sur le sujet C'est vraiment un problème récurent.

    1) Oui, c'est possible, il suffirait de passer this (donc l'instance de ta fenêtre) à ton objet traitement via le constructeur par exemple.
    2) Le problème avec textbox1, c'est que premièrement, le designer de fenêtre a créé ce contrôle "private". Cependant, il est possible de changer cela via le designer. Il suffit donc de sélectionner ton contrôle en mode design, aller dans les panels des propriétés du contrôle et de setter la propriété "Modifiers" à "public". Bon, c'est pas la solution la plus élégante car j'aurais pu t'en proposer au moins 3 autres mais bon ça répond à ton problème.

    A partir de là, tu pourras accéder à ton contrôle de la même façon qu'avec ta variable "donnees". Mais ici va survenir un problème lors de la minipulation du contrôle au travers de ton thread : un CrossOverException (ou quelque chose du genre). C'est à dire que depuis le framework .NET 2.0, tout thread qui crée des contrôles graphiques est le seul à avoir le droit de manipuler les contrôles qu'il a créé. Or quand tu lances ton application, c'est le thread principal qui gère ton interface... Pour résoudre ce problème, il est possible à partir d'un thread qui veut manipuler un contrôle qui ne lui appartient pas : je vais donner la main au thread responsable du contrôle en question pour qu'il s'occupe de mettre à jour ce que je ne sais pas modifier directement.

    Un seul lien parce qu'à mon avis vu l'heure, je me suis encore mal exprimé et si tu n'as rien compris, n'hésite pas
    http://faqcsharp.developpez.com/?page=form#form_thread
    Jérôme Lambert
    Développeur, Architecte, Rédacteur & Fan technologies Microsoft
    Ma boite informatique | Mon profil LinkedIn

  3. #3
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Un autre conseil : utilise un Backgroundworker, plutôt qu'un thread. Il lance des événements (quand il a fini, quand il veut notifier que sa tâche avance, etc.) dans le thread de l'UI. Tu trouveras beaucoup de posts à ce sujet dans ce forum
    ಠ_ಠ

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 23/09/2006, 13h18
  2. [MFC] Communication entre une CDialog et une CFormview
    Par julien.nasser dans le forum MFC
    Réponses: 8
    Dernier message: 06/07/2006, 14h32
  3. Communication entre les classes
    Par jagboys dans le forum MFC
    Réponses: 6
    Dernier message: 20/06/2006, 06h32
  4. [UML][Debutant]Choisir entre une classe et une interface ?
    Par Laurent Dardenne dans le forum Diagrammes de Classes
    Réponses: 11
    Dernier message: 24/04/2006, 20h45
  5. Réponses: 3
    Dernier message: 22/11/2005, 11h12

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