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 :
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))
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