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 Inter thread (BackGroundWorker)


Sujet :

C#

  1. #1
    Membre habitué
    Profil pro
    Développeur .Net, Administrateur système
    Inscrit en
    Octobre 2003
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .Net, Administrateur système
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 219
    Points : 135
    Points
    135
    Par défaut Communication Inter thread (BackGroundWorker)
    IDE : VS 2005

    Bonjour,

    j'utilise le BackGroundWorker pour effectuer un long traitement tout en maintenant l'application "vivante" et pour indiquer l'avancement du traitement, j'ai crée une petite classe avancement que je passe comme argument dans la méthode ReportProgress...

    Existe il d'autres moyens pour que le code executé par le backgroundworker puisse interargir avec la form ? (sendmessage ? PostMessage ?.. )


    Merci..!!

  2. #2
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    Ben nan, justement l'intéré du backgroundworker et de pouvoir interragir avec la form grace à son event Progress

  3. #3
    Membre habitué
    Profil pro
    Développeur .Net, Administrateur système
    Inscrit en
    Octobre 2003
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .Net, Administrateur système
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 219
    Points : 135
    Points
    135
    Par défaut
    Citation Envoyé par guitoux1
    Ben nan, justement l'intéré du backgroundworker et de pouvoir interragir avec la form grace à son event Progress
    pendant le traitement lancé par le backgroundworker je dois :

    mettre a jour un label
    mettre à jour une listbox
    mettre à jour un controle personnalisé

    Bref, je dois créer une classe pour gérer ces trois etats... Si il y a plus rapide je suis preneur ..

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 264
    Points : 144
    Points
    144
    Par défaut
    Citation Envoyé par b_lob
    pendant le traitement lancé par le backgroundworker je dois :

    mettre a jour un label
    mettre à jour une listbox
    mettre à jour un controle personnalisé

    Bref, je dois créer une classe pour gérer ces trois etats... Si il y a plus rapide je suis preneur ..
    Certains vont surement pas être d'accord, mais je donne quand même mon approche :

    tu oublies les event progress et tu fait directement appel à tes composants du form dans ton backgroundworker non sans avoir oublié de désactiver le contrôle qui interdit les échanges inter threads :

    CheckForIllegalCrossThreadCalls = false;

    A mon avis, si c'est juste pour reporter l'évoltution de ton thread à l'aide de ton form, ça devrait le faire ...

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 32
    Points : 24
    Points
    24
    Par défaut
    Tu peux aussi utiliser les délégués qui vont te permettre de toucher à l'interface même pendant l'exécution du thread :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public delegate void ChangeItemText(ListViewItem item, string text);
     
    public void ChangeItemTextMethod(ListViewItem item, string text)
    {
         item.Text = text;
    }
    Et dans ton backgroundWorker_ProgressChanged :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    object[] param = new object[2];
    object[0] = item;     // ton listViewItem
    object[1] = "ton texte";
    listView1.Invoke(new ChangeItemText(ChangeItemMethod), param);
    C'est peut-être un peu long mais je crois qu'il n'y a pas plus propre

Discussions similaires

  1. communication inter threads
    Par contremaitre dans le forum C
    Réponses: 8
    Dernier message: 20/11/2008, 10h48
  2. Communication inter-threads par stdout sous linux
    Par millerf dans le forum Concurrence et multi-thread
    Réponses: 8
    Dernier message: 17/07/2007, 11h28
  3. Communication inter-threads: methode elegante?
    Par jc_isd dans le forum C++
    Réponses: 10
    Dernier message: 17/01/2007, 10h55
  4. [c#]Communication inter thread
    Par chasse dans le forum Windows Forms
    Réponses: 6
    Dernier message: 18/12/2006, 20h45
  5. communication inter-thread en c sous linux
    Par splinternabs dans le forum POSIX
    Réponses: 17
    Dernier message: 22/02/2006, 09h34

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