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

iow4 303 Messages postés samedi 22 octobre 2005Date d'inscription 2 novembre 2008 Dernière intervention - 31 déc. 2006 à 21:27 - Dernière réponse : iow4 303 Messages postés samedi 22 octobre 2005Date d'inscription 2 novembre 2008 Dernière intervention
- 1 janv. 2007 à 14:10
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.
Afficher la suite 

6 réponses

Répondre au sujet
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 1 janv. 2007 à 13:05
+3
Utile
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
*/
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_coq
taupe4 94 Messages postés dimanche 16 avril 2006Date d'inscription 17 avril 2008 Dernière intervention - 31 déc. 2006 à 22:26
0
Utile
essaie de faire une copie de la collection, il se peut que ça soit du au fait que la ListBox est STA.

Enjoy
Commenter la réponse de taupe4
iow4 303 Messages postés samedi 22 octobre 2005Date d'inscription 2 novembre 2008 Dernière intervention - 1 janv. 2007 à 12:36
0
Utile
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
Commenter la réponse de iow4
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 1 janv. 2007 à 12:57
0
Utile
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
*/
Commenter la réponse de cs_coq
iow4 303 Messages postés samedi 22 octobre 2005Date d'inscription 2 novembre 2008 Dernière intervention - 1 janv. 2007 à 12:59
0
Utile
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
Commenter la réponse de iow4
iow4 303 Messages postés samedi 22 octobre 2005Date d'inscription 2 novembre 2008 Dernière intervention - 1 janv. 2007 à 14:10
0
Utile
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 />
Commenter la réponse de iow4

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.