Bonjour,
je travaille actuellement sur une application client/serveur faisant appel aux socket en mode asynchrone.
concernant les sockets, ca devrait aller. la ou je peche c'est avec le "invoke".
cote du socket serveur, je le connecte avec "Bind" et "Listen" puis je le met en attente d'une connection client avec "BeginAccept". la fin de la connection client se fait dans un autre thread avec "EndAccept", a ce momment la j'aimerais mettre a jour un textbox sur ma fenetre principale. cette fonction s'executant dans un autre thread je ne peux pas le faire directement.
je dois donc utiliser le "invoke". mais au moment ou je l'appel j'ai l'erreur 'Impossible d'appeler Invoke ou BeginInvoke sur un contrôle tant que le handle de fenêtre n'a pas été créé.'.
mon code est le suivant :
l'erreur se produit sur la ligne ou j'appelle la fonction "invoke"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 Public Sock_SERVEURlisten As Socket Public Sock_SERVEURclient As Socket Delegate Function SERVEUR_AddConnection_delegate() Public SERVEUR_AddConnection As SERVEUR_AddConnection_delegate = AddressOf SERVEUR_AddConnection_src Function SERVEUR_Connection(ByVal AdresseIP As String, ByVal Port As Integer) Dim SERVEUR_ep As IPEndPoint Sock_SERVEURlisten = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) SERVEUR_ep = New IPEndPoint(IPAddress.Parse(AdresseIP), Port) Sock_SERVEURlisten.Bind(SERVEUR_ep) Sock_SERVEURlisten.Listen(1) Sock_SERVEURlisten.BeginAccept(AddressOf SERVEUR_NouvelleConnection, Sock_SERVEURlisten) Form1.txt_serveur.Text = Form1.txt_serveur.Text & "SERVEUR en attente de connection sur " & AdresseIP & " : " & Port & vbCrLf End Function Function SERVEUR_NouvelleConnection(ByVal asyncResult As IAsyncResult) Sock_SERVEURclient = Sock_SERVEURlisten.EndAccept(asyncResult) Form1.txt_serveur.Invoke(SERVEUR_AddConnection, Nothing) End Function Function SERVEUR_AddConnection_src() Form1.txt_serveur.Text = Form1.txt_serveur.Text & "Nouvelle connection" & vbCrLf End Function
voila, si quelqu'un peut m'aider, c'est la 1ere fois que je suis confronter aux probleme de multi-thread...
Partager