cs_Houba
Messages postés6Date d'inscriptionmercredi 6 février 2002StatutMembreDernière intervention10 mars 2006
-
9 mars 2006 à 16:45
cs_cybergob
Messages postés10Date d'inscriptiondimanche 23 février 2003StatutMembreDernière intervention 4 février 2007
-
4 févr. 2007 à 07:52
Bonjour,
voilà mon soucis : Je suis en train de faire une appli client / serveur. La communication entre les deux se passent bien et c'est mon serveur qui envoie des données aux clients et je voudrais que quand mon client récupère une info du serveur, qu'il mette à jour par exemple un textbox de la form du client.
Mon soucis, c'est que quand je fais un truc du genre
TextBox1.AppendTest("coucou")
Ca ne marche, j'ai une erreur d'opérations inter thread car je recois mon info comme ceci dans un module à part :
alicvb
Messages postés134Date d'inscriptionvendredi 19 mars 2004StatutMembreDernière intervention 6 juin 20071 9 mars 2006 à 19:12
Bonjour,
J'ai eu le même problème avec une utilisation des évennements du filesystemwatcher qui se provoquent sur un autre thread...
Et après avoir pas mal galéré, j'ai réussi à contourner le problème avec les délégués. Pour ton cas, ça donnerait un truc du genre :
à ajouter :
private delegate sub dAjouteTexte(Texte as string)
Private sub AjouteTexte(Texte as string)
form1.textbox1.appendtext(texte)
end sub
Puis dans ta sub ReadSocket, tu remplaces la ligne qui ajoute le texte par :
me.invoke(new dajoutetexte(addressof AjouteTexte),(System.Text.Encoding.ASCII.GetString(readBuffer) + ControlChars.Cr + ControlChars.Lf))
cs_Willi
Messages postés2375Date d'inscriptionjeudi 12 juillet 2001StatutModérateurDernière intervention15 décembre 201823 9 mars 2006 à 19:54
Il est préférable de vérifier si l'appelant (ReadSocket) doit appeler une méthode invoke lors de l'appel de méthodes puisque l'appelant n'utilise pas le même thread que le thread où a été crée ton objet Textbox1.
if me.invokerequired then
me.invoke(new dajoutetexte(addressof AjouteTexte),(System.Text.Encoding.ASCII.GetString(readBuffer) + ControlChars.Cr + ControlChars.Lf))
end if