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