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++/CLI Discussion :

Thread et listView C++ cli


Sujet :

C++/CLI

  1. #1
    Débutant
    Inscrit en
    Mars 2006
    Messages
    492
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 492
    Points : 94
    Points
    94
    Par défaut Thread et listView C++ cli
    Bonjour;

    jai créer un Thread qui met a jour une listView, et a l'execution il y'a une exception :

    An unhandled exception of type 'System.InvalidOperationException' occurred in System.Windows.Forms.dll

    Additional information: Cross-thread operation not valid: Control 'listView2' accessed from a thread other than the thread it was created on.


    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
     
    delegate void DelegateThreadTask();
    .
    .
    .
     
    private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
    Threading::Thread(gcnew ThreadStart(this, &Form1::Traitement));
    t->Start();
     
    }
    .
    .
    .
     
    void Traitement( )
    { while(true) {ThreadTask();Thread::Sleep(100);}
     
    }
     
     
    void ThreadTask() 
    {listView2->Items->Add("zezeze");
     
    DelegateThreadTask ^ er = gcnew DelegateThreadTask(this, &Form1::ThreadTask);
    Invoke(er); 
    }

    comment écrire dans la listView??

    Merci énormement

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    inspire toi de ce qu'il y a dans la faq http://dotnet.developpez.com/faq/cpp...trolFromThread

  3. #3
    Débutant
    Inscrit en
    Mars 2006
    Messages
    492
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 492
    Points : 94
    Points
    94
    Par défaut
    Bonjour,

    Jai fais comme l'exemple, et il y'a tjs une exception aprés la listView, je crois que le thread initial est le seule qui a le droit d'ecrire et de lire, et comme jai créer un autre thread, il beug, svp aidez moi a ecrire dans listView,

    Merci

  4. #4
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    l'exemple de la faq fonctionne correctement

    le but c'est quoi ? d'alimenter une listview à intervalle régulier ?

  5. #5
    Débutant
    Inscrit en
    Mars 2006
    Messages
    492
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 492
    Points : 94
    Points
    94
    Par défaut
    Rebonjour,

    oui, je veux ecrire dans un listView dans un inervalle régulier, il me fais cette erreur :

    An unhandled exception of type 'System.InvalidOperationException' occurred in System.Windows.Forms.dll

    Additional information: Cross-thread operation not valid: Control 'listView2' accessed from a thread other than the thread it was created on.


    sans listView, il marche correctement un loop, mais des que j'ajoute unlistView, il y'a exception,

    jai trouvé plein d'exemple, et aucun d'entre eux ne marche,

    merci infiniment

  6. #6
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    et pourquoi tu passes pas par un timer au fait ? t'as essayé ?

  7. #7
    Débutant
    Inscrit en
    Mars 2006
    Messages
    492
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 492
    Points : 94
    Points
    94
    Par défaut
    Bonsoir,

    Au début jai fais un Timer, a chaque tick il lance une méthode qui fais : "While il ya des paquets dans le traffic réseaux => listView->Items->add(paquet)", mais elle alourdis considérablement le système { quand il ajoute dans la listView je peux pas bougé mon interface ni clické sur les bouttons, jusqau'au il y'a plus de traffic sur le réseau}, d'ou je suis passé au Thread el la malheureusement je suis bloqué,

    Merci énormement

  8. #8
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    faut pas faire un while, un while c'est potentiellement bloquant
    mais si tu recois beaucoup de paquet, faut faire ton while dans un thread

  9. #9
    Débutant
    Inscrit en
    Mars 2006
    Messages
    492
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 492
    Points : 94
    Points
    94
    Par défaut
    Oui exactement, il faut un thread, et ça marche bien que je l'affiche dans un message box, le problem unique c'est dans listView qui me fais une Exception a cause du thread intial de mon application,

    Est ce qu'il ya un moyen de régler ça??

    Merci

  10. #10
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    déjà, dans ton code, il faut pas allouer à chaque boucle er (DelegateThreadTask)
    il faut le faire une fois pour toute dans le load par ex

Discussions similaires

  1. [VB2008] Threads et ListView
    Par Tagazog dans le forum VB.NET
    Réponses: 8
    Dernier message: 25/11/2008, 19h56
  2. listView c++ cli
    Par abbd dans le forum C++/CLI
    Réponses: 18
    Dernier message: 02/01/2008, 09h32
  3. [C++/CLI] Méthode cyclique dans thread principal
    Par Plio dans le forum C++/CLI
    Réponses: 4
    Dernier message: 09/10/2007, 15h19
  4. Colorer un Item de la listView C++ CLI
    Par abbd dans le forum C++/CLI
    Réponses: 1
    Dernier message: 25/07/2007, 15h10
  5. Threads et données d'un listview.
    Par azerty53 dans le forum VB.NET
    Réponses: 10
    Dernier message: 06/06/2007, 20h37

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