[.NET2] Passage d'argument à un thread [Résolu]

Signaler
Messages postés
303
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
2 novembre 2008
-
Messages postés
303
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
2 novembre 2008
-
Bonjour,

Tout d'abord je vous souhaite à tous une exelence année 2007.
J'ai un Thread principal qui dois lancer un thread secondaire avec un parametre ( liste issue d'un control ListBox ) je me suis inspiré de cette source http://www.csharpfr.com/codes/THREADS-AVEC-PARAMETRES-NET-NET_28268.aspx
Mais j'ai toujours une erreur de cross-thread à la compilation, j'aimerais faire un code jolie et pas desactivé tout betement cette erreur

Voici le code qui lance le thread secondaire :
<hr size="2" width="100%" />Thread t = new Thread(new ParameterizedThreadStart(go));
                t.Start(listeDico.SelectedItems);
<hr size="2" width="100%" />
et voici la fonction ( mon thread secondaire ) :
<hr size="2" width="100%" />void go(object arg)
        {

            ListBox.SelectedObjectCollection di = (ListBox.SelectedObjectCollection)arg;
            for (int i = 0; i < di.Count; i++)
            {
                MessageBox.Show(di[i].ToString());
            }
        }
<hr size="2" width="100%" />Merci d'avance pour votre aide.

6 réponses

Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
80
Hum oui je me suis un peu mélanger les pinceaux.
Pour la copie, tu peux notamment passer par la méthode CopyTo.

/*
coq
MVP Visual C#
CoqBlog
*/
Messages postés
94
Date d'inscription
dimanche 16 avril 2006
Statut
Membre
Dernière intervention
17 avril 2008
1
essaie de faire une copie de la collection, il se peut que ça soit du au fait que la ListBox est STA.

Enjoy
Messages postés
303
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
2 novembre 2008
4
J'ai modifié le code de création du thread en :
<hr />

Thread t =
new
Thread(
new
ParameterizedThreadStart(go));

object arg = listeDico.SelectedItems;t.Start(arg);

<hr />

Mais toujours même erreur
Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
80
Salut,

SelectedObjectCollection étant de type référence, tu n'as pas effectuer de copie avec ton code précédent.
Pour ce qui concerne les opérations cross-thread, tu peux commencer avec le tuto de Mx.

/*
coq
MVP Visual C#
CoqBlog
*/
Messages postés
303
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
2 novembre 2008
4
Salut,

Je me suis dirigé en premier vers cet article mais le probleme c'est qu'il montre comment changé des valeurs entre thread mais pas comment faire passer des variables
Messages postés
303
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
2 novembre 2008
4
J'ai resolut mon probleme : merci à tous

voici comment j'appelle le thread
<hr />string

[] array =
new
string[listeDico.SelectedItems.Count];listeDico.SelectedItems.CopyTo(array, 0);

t.Start(array);

<hr />