Opérations cross-threads déclenché par un évènement

Résolu
churrros Messages postés 19 Date d'inscription mardi 26 juin 2007 Statut Membre Dernière intervention 9 avril 2008 - 27 juil. 2007 à 17:23
churrros Messages postés 19 Date d'inscription mardi 26 juin 2007 Statut Membre Dernière intervention 9 avril 2008 - 1 août 2007 à 15:47
Bonjour,

J'aimerais me servir des conseils de MorpionMx au sujet des Opérations cross-threads (http://www.csharpfr.com/tutoriaux/CSHARP-OPERATIONS-CROSS-THREADS-UTILISATION-DELEGATIONS-SYNCHRONES-ASYNCHRONES_174.aspx) pour adapter la source Client-Serveur de LumesH (http://www.csharpfr.com/codes/CLASS-TCP-CLIENT-SERVEUR_32989.aspx).

Ca fait plusieurs heures que je bataille, pourtant j'ai très bien compris le principe des délégués pour éviter les cross-threads . Là où je bloque c'est que, pour créer un évènement dans sa classe "serveur", LumesH utilise déjà des délégués. Pourtant, lorsqu'un évènement se produit et qu'un Label du WinForm est modifié pendant cet évènement je récupère un cross-threads. Comment faire pour que la méthode lancée par le thread appelle un délégué du WinForm (qui va appelé la méthode de modification du Label) plutôt qu'un délégué lié à l'évènement, tout en conservant la notion d'évènement?

J'avoue que je m'embrouille un peu tout seul là, ça fait des heures que je tourne en rond, c'est très confu tout ça pour moi... J'ai réussi à reproduire l'exemple de MX sans traiter d'évènement mais là, je bloque complètement!

Quelqu'un a peut-être déjà modifié le source Client-Serveur de LumesH pour qu'il ne génère plus de cross-threads...?

7 réponses

cs_Yxion Messages postés 219 Date d'inscription jeudi 6 juillet 2006 Statut Membre Dernière intervention 7 septembre 2009
28 juil. 2007 à 17:27
Peut-être tu devrais allez voir ca : THREADER SIMPLEMENT UNE CLASSE POUR INTERAGIR AVE ...

<hr />
I love .net
3
cs_Yxion Messages postés 219 Date d'inscription jeudi 6 juillet 2006 Statut Membre Dernière intervention 7 septembre 2009
1 août 2007 à 15:07
Ben tu fais comme ca :

classmaClass{
privateMaClassThreadee maVariableLocalDeMaclassTreadee;

public maClass()
{
   maVariableLocalDeMaclassTreadee = newMaClassThreadee(this);
}

}

<hr />
I love .net
3
churrros Messages postés 19 Date d'inscription mardi 26 juin 2007 Statut Membre Dernière intervention 9 avril 2008
31 juil. 2007 à 09:54
Je vais essayer de me débrouiller avec ça, merci!
0
churrros Messages postés 19 Date d'inscription mardi 26 juin 2007 Statut Membre Dernière intervention 9 avril 2008
1 août 2007 à 00:11
J'y suis presque, sauf que je n'arrive pas à déclarer la classe à Threader en utilisant le mot clé "this" :

// créer une nouvelle instance du serveur

private
tcpServeur InstanceClasseServeur =
new
tcpServeur(
this);

Je ne peux pas utiliser cette syntaxe si je ne suis pas à l'intérieur d'une méthode, le compilateur me signale que "this" est hors contexte. Si je créé l'instance depuis une méthode ça fonctionne mais je ne peux accéder ensuite à cette instance que depuis cette même méthode.

Comment puis-je passer en paramètre mon objet Form sans utiliser "this"?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Yxion Messages postés 219 Date d'inscription jeudi 6 juillet 2006 Statut Membre Dernière intervention 7 septembre 2009
1 août 2007 à 04:03
Si tu respectes le schema de mon exemple, tu ne devrais pas avoir de pb

<hr />
I love .net
0
churrros Messages postés 19 Date d'inscription mardi 26 juin 2007 Statut Membre Dernière intervention 9 avril 2008
1 août 2007 à 08:52
Oui en respectant le schéma de l'exemple effectivement aucun problème, mais dans ton exemple tu déclares l'instance de la classe à Threader dans une méthode de la Form appelante. Ce que je souhaite c'est pouvoir accéder à mon instance depuis n'importe quelle méthode de ma Form, donc j'suis obligé de la déclarer en dehors d'une méthode, et là, "this" ne passe pas...

Cela dit, ton exemple m'a quand même beaucoup aidé.
0
churrros Messages postés 19 Date d'inscription mardi 26 juin 2007 Statut Membre Dernière intervention 9 avril 2008
1 août 2007 à 15:47
Ben ouais, ça marche nickel, c'était pas compliqué et pourtant j'y ai passé un sacré bout de temps sans trouver. Ca paraît tellement évident quand on a la réponse, j'ai vraiment du mal, vivement que tout cela soit limpide pour que j'évite de poser des questions cons.

Merci encore!
0
Rejoignez-nous