begin process at 2010 02 10 02:27:53
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Windows

 > 

Process

 > 

Threading pour accéder aux Items d'une ListView


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Threading pour accéder aux Items d'une ListView

mardi 26 juin 2007 à 13:50:01 | Threading pour accéder aux Items d'une ListView

tahiti_bob

Membre Club
Bonjour,

Au chargement d'une form, je remplis un contrôle ListView (name: liste) à partir des rows d'un DataGridView.
Je voudrais, dans un thread séparé, traiter chaque Items de la ListView. J'ai justement une exception "Opération inter-threads non valide : le contrôle 'liste' a fait l'objet d'un accès à partir d'un thread autre que celui sur lequel il a été créé.".

Existe t'il une solution pour récupérer les Items de ma ListView afin que dans mon thread je puisse les parcourir simplement avec un foreach ?

Merci d'avance de vos réponses
@++ Clém
mardi 26 juin 2007 à 14:47:11 | Re : Threading pour accéder aux Items d'une ListView

Julien237

Réponse acceptée !
Salut,
Une mauvaise solution (pourquoi je te la présente si elle est mauvaise :p, juste pour tester ton appli, elle n'est pas valable à long terme) est simplement de faire
Controls.CheckForIllegalCrossThreadCall = false;
(nom de la propriété de mémoire, peut-être vaguement différente...)

Pour une solution plus sérieuse, tu dois utiliser Invoke. Donc toutes les lignes de codes qui touchent au propriétés et aux méthodes de ta listview doivent être placé dans une méthode, puis dans ton thread fille, tu fais ListView.Invoke(delegatedetaméthode).


Julien.
mardi 26 juin 2007 à 14:52:39 | Re : Threading pour accéder aux Items d'une ListView

Bidou

Administrateur CodeS-SourceS
Salut,
Je te conseille vivement de jeter un oeil sur ce tuto





-Blog-
mardi 26 juin 2007 à 16:00:05 | Re : Threading pour accéder aux Items d'une ListView

tahiti_bob

Membre Club
Bonjour,

Merci Julien237 de ta réponse. Il est effectivement possible de désactiver la levée d'exceptions pour l'interthread j'avais vu ca il me semble dans les propriétés de mon projet^^. J'avais essayé de passer par les Invoke sans succès je vais tenter ce que tu me propose.
Bidou, merci pour le tuto je vais y jeter un coup d'oeil :D

Merci à vous deux. Je vous tiens au courant de l'évolution de mon problème!
Mon projet approche de sa version finale (Bibliothèque et lecteur multimédia après presque 3 ans de développement :D).

@++ Tahiti_bob
mardi 26 juin 2007 à 18:04:19 | Re : Threading pour accéder aux Items d'une ListView

Bidou

Administrateur CodeS-SourceS
3 ans de dev?
Ca doit etre mieux que Media Player 11 alors...






-Blog-
mardi 26 juin 2007 à 22:52:25 | Re : Threading pour accéder aux Items d'une ListView

Yxion

Membre Club
J'ai laissé une source pour utiliser les "Invoke" des forms : C'est simple et ca doit correspondre parfaitement à ton utilisation : Tu créer une classe pour ton thread, tu lui pose un champ pour cibler le formulaire avec lequel agir, et tu lui envoi les infos sous forme d'un évenement que tu gère dans ta form
http://www.csharpfr.com/codes/THREADER-SIMPLEMENT-CLASSE-POUR-INTERAGIR-AVEC-FORM_42292.aspx
mercredi 27 juin 2007 à 14:06:07 | Re : Threading pour accéder aux Items d'une ListView

tahiti_bob

Membre Club
Réponse acceptée !
Bonjour,

Merci Yxion pour ton code sur le threading.
J'ai finalement utilisé ce que Julien237 a proposé avec le Control.Invoke(delegate).

//Déclaration
privatedelegatevoidtag_Delegate();
privatetag_Delegate deleg_tag;
privateThread tagger;

Au chargement de la form
d
eleg_tag = newtag_Delegate(this.ajout);
tagger =
newThread(newThreadStart(this.ThreadPro));
tagger.Start();

privatevoid ThreadPro()
{
liste.Invoke(deleg_tag); //Où "liste" est le nom du contrôle ListView
}

private
void ajout()
{
      foreach (ListViewItem lvi in liste.Items)
      {
      //Code...
      }
}


@++ Clém
mercredi 27 juin 2007 à 14:17:56 | Re : Threading pour accéder aux Items d'une ListView

Julien237

M'enfin mon message ! Il a disparu ^^...
Bon je retappe...

Lorsque tu utilise Controle.Invoke(MaMéthode) c'est le thread créateur du controle qui s'exécute sur MaMéthode, donc ici tu ne fais pas de multi-threading (ou en tout cas rien d'utile).
Tu devrais plutot mettre ton algo qui prend du temps (puisque j'imagine que c'est la raison pour laquelle tu fais du multi-threading) dans ThreadPro, et mettre l'affichage final qui touche au controle dans ajout... Je pense qu'ajout ne devrait pas faire plus d'une ou deux lignes de codes...


Julien.


Cette discussion est classée dans : listview, accéder, thread, items, threading


Répondre à ce message

Sujets en rapport avec ce message

Parcours de Listview [ par scoubidou944 ] bon ca compile pas :Qql'1 pourrait me dire ce qui déconne & si les formules du genre 'System.Windows.Forms.ListBox' C propre ou bien si y'a moyen de r ListView récupérer element texte : soluce [ par YOOP ] for(int i=0;i{ if(ListView.Items[i].Checked==true) { for(int h=1;h { ListViewItem temp1 = ListView.GetItemAt(h,i); temp1 = ListView.I Déplacer les items d'une listview [ par tahiti_bob ] Bonjour,Je voudrais savoir comment est ce que l'on fait pour déplacer les items d'une listview avec la souris ? (comme la playlist de Winamp )Merci d' LitView: desactiver l'affichage des images près des items [ par Fildomen ] Salutj'ai une listview, qui affiche les items en "Details", mais le problème, c'est qu'elle reserve toujours une ptite place près des items pour que j Listview et collection d'items [ par el_teedee ] Bonjour, je voudrais -pour rafraichir ma listview après un traitement- mettre la liste des lignes dans une collection de ListViewItem par exemple. J' Déplacer les items d'une listview sans drag&drop [ par dysko ] J'aimerais savoir si on peut retrier la listview à partir d'un index en particulier...sans redessiner tout le controle ou alors recréer une autre list ListView et couleur selection items [ par YLSEAGLE ] Bonjour à tous. Je cherche à changer la couleur de sélection d'un item dans une listview. Par défaut, celle ci est de couleur bleu avec le texte en bl Cross-Threading -> Exception [ par sebseb42 ] salut a tousvoila mon probleme est simple, dans ma classe principal, je lance un thread, et dans ce thread j'essaye de modifier un controle.ca fonctio Commande dans programme [ par piep14 ] Bonjour, je souhaite passer des écritures dans telnet. J'ai fait ceci qui lance bien telnet et le probleme et que je n'arrive pas a simuler la touche


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,338 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales