Partager un ArrayList dans deux threads [Résolu]

Signaler
Messages postés
27
Date d'inscription
jeudi 2 septembre 2004
Statut
Membre
Dernière intervention
28 juin 2008
-
Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
-
Bonjour!

Voilà tout est dans le titre. Je viens tout juste de me mettre au c#, et je commence par un petit prog de serveur de messages.

J'ai une classe Form1, avec les méthodes main, Ecoute et gere. Je veux
que Ecoute et gere puissent accéder à une ArrayList qui contient les
infos des clients.

J'ai cru comprendre que les délégués faisait quelque chose dans ce
genre mais je n'ai pas très bien compris comment on les utilisait.



Merci d'avance

8 réponses

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

La méthode dont tu parles est utilisée pour des contrôles, pour l'utilisation de Control.Invoke. Voir le tuto (de Mx, si je me souviens bien) à ce sujet.
Ce qui n'est pas le cas d'ArrayList.
Dans ton cas, la réponse est dans la doc de la classe :
"ArrayList peut prendre en charge plusieurs opérations de lecture simultanées, tant que la collection n'est pas modifiée. Afin de garantir la sécurité des threads de ArrayList, toutes les opérations doivent être effectuées par l'intermédiaire du wrapper retourné par la méthode Synchronized."

/*
coq
MVP Visual C#
*/
Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
80
C'était bien de Mx ^^ : OPÉRATIONS CROSS THREADS - UTILISATION DES APPELS ASYNCHRONES

/*
coq
MVP Visual C#
*/
Messages postés
27
Date d'inscription
jeudi 2 septembre 2004
Statut
Membre
Dernière intervention
28 juin 2008

Merci de votre prompte réponse.
Effectivement j'avais vu ce tuto mais j'arrivais pas à l'adapter à ma situation... on comprend pourquoi XD
J'ai effectué toutes les modifications nécessaires, remplacé clients par ArrayList Synchronized.
Mais là je tombe sur une erreur "[Mon Programme] ne possède pas de point d'entrée défini."
Une idée d'où cela pourrait provenir?
Messages postés
27
Date d'inscription
jeudi 2 septembre 2004
Statut
Membre
Dernière intervention
28 juin 2008

Apparemment c'est ma fonction Main() qui clochait. J'avais enlevé le static pour pouvoir faire référence aux méthodes de mes threads. Chose qu'apparemment, il ne faut pas faire :p
J'ai rectifié en lancant mes threads dans InitialiseComponent() et le prog se lance sans accroc.

Merci de votre aide!

PS: J'avais fait une autre app entretemps en contournant le problème : j'avais fusionné tant bien que mal les deux threads, mais cette solution est de loin la plus facile !
Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
80
Un programme doit possèder un point d'entrée, en l'occurence la méthode Main.
Vérifie dans les propriétés de projet qu'un point d'entrée est bien sélectionné : regarde l'option "Objet de démarrage".

/*
coq
MVP Visual C#
*/
Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
80
Oups, trop long à taper ^^

/*
coq
MVP Visual C#
*/
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
44
Merci pour la pub coq ;)
Et une petite pensée pour tes amis dindes et chapons qui passeront pas l'année :/

Mx
Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
80
Oui, c'est chaque année la même déchirure mélée d'un soupçon de régal...bizarre comme sentiment

/*
coq
MVP Visual C#
*/