Cross-thread operation not valid [Résolu]

Signaler
Messages postés
17
Date d'inscription
lundi 30 juillet 2007
Statut
Membre
Dernière intervention
3 avril 2009
-
Messages postés
168
Date d'inscription
jeudi 28 juin 2001
Statut
Membre
Dernière intervention
18 octobre 2008
-
Bonjour tt le monde voila je suis un débutant en vb.net sur tt en winsock
et rencontre des problèmes en utilisant les winsockets et j’espère que vous puissez m’aidée

Voila mon problème j’ai une petite application de chat et fait des transmission
et lorsque je vous récupère les information je trouve un problème que je identifie pas

Voila mon cod<!-- BEGIN TEMPLATE: bbcode_code -->

Code :
PrivateSub Winsock_client_DataArrival(ByVal sender As Winsock_Control.Winsock, ByVal BytesTotal AsInteger)Handles Winsock_client.DataArrival
 
 
        Dim donnees AsString = ""
        Winsock_client.GetData(donnees)
        MsgBox(donnees.GetType.ToString)
        Me.rtb_chat.AppendText(donnees)
        MsgBox(donnees)
 
 
 
    EndSub

'rtb_chat' est une rich textbox

Mon erreur

Cross-thread operation not valid: Control 'rtb_chat' accessed from a thread other than the thread it was created on.<!-- / message -->

1 réponse

Messages postés
168
Date d'inscription
jeudi 28 juin 2001
Statut
Membre
Dernière intervention
18 octobre 2008
6
Ton problème vient du fait que Winsock créé un thread pour attendre l'arrivée de données sur ta connexion. L'événement DataArrival ne s'exécute pas dans le même thread que le principal dans lequel ont été créée les composants graphiques.

Depuis le framework 2, tu obtiens en mode Debug une exception lorsque tu tentes d'accéder à un composant graphique en dehors du thread dans lequel il a été instancié.

Tu as 2 solutions :
- Décocher cross-thread exception dans les Exceptions (ça se trouve dans le menu Debug de Visual Studio)... mais ce n'est pas une bonne solution
- Utiliser un délégué qui va s'exécuter dans le thread du composant graphique. Pour faire ça, il faut utiliser la méthode Invoke :
Me.rtb_chat.Invoke(...)

Tu trouveras une explication plus précise ici : http://www.csharpfr.com/tutoriaux/CSHARP-OPERATIONS-CROSS-THREADS-UTILISATION-DELEGATIONS-SYNCHRONES-ASYNCHRONES_174.aspx