Bonjour,
J'ai un projet de messagerie instantanée à créer en .Net.
J'ai donc créer une classe Serveur (qui est un thread lancé au load de mon formulaire principale) qui écoute via une socket sur un port. Dés qu'un client se connecte sur le socket, je veux créer un formulaire "chat" et l'afficher.
Cependant, cela ne marche pas. Le formulaire "chat" s'affiche mais il reste indéfiniment grisé.
J'ai l'impression que faire .Show() sur un formulaire dans un thread pause un problème, mais je ne comprends pas pourquoi.
Appel du thread :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Private Sub Main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Serveur = New ClasseServeur(CInt(tb_port.Text)) caller = New Threading.Thread(New Threading.ThreadStart(AddressOf Serveur.run)) caller.Start() End Sub
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 Imports System.Collections.Generic Imports System.Net Imports System.Net.Sockets Imports System.Text Imports System.IO Imports System.Threading Public Class ClasseServeur Private ep As EndPoint Public Sub New(ByVal port As Integer) ep = New IPEndPoint(IPAddress.Any, port) End Sub Public Sub run() 'Dim caller As Threading.Thread Dim socket As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) socket.Bind(ep) socket.Listen(100) While True Dim clientSocket As Socket = socket.Accept() MessageBox.Show(String.Format("New client at {0}", DirectCast(clientSocket.LocalEndPoint, IPEndPoint).Address.ToString())) Dim chat As New Chat(clientSocket) chat.Show() 'Dim thread As New ClasseThread(clientSocket, chat) ''chat.Invoke(New NomDeMonDelegue(AddressOf chat.rtb_convers.AppendText), "texte") 'caller = New Threading.Thread(New Threading.ThreadStart(AddressOf thread.run)) 'caller.Start() End While End Sub End Class
Partager