Bonjour,
tout est dit dans le titre. Je suis en train d'implémenter 2 petites applis client/serveur. Pour l'instant, je me contente de faire un truc simplissime pour apprendre les rouages (un tchat on ne peut plus basique).
Tout fonctionne bien sauf que j'ai des messages d'erreurs violents à la fermeture des applis.
J'aimerais donc savoir comment faire pour tuer un thread que j'ai construit? Voici des extraits de mon code :
Lorsque je lance simplement cette appli (en debug) et que je la ferme aussitôt, le thread threadAttenteConnexion continue et je dois faire un violent "arrêter le deboggage" pour le tuer enfin.
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 [...] public Form1() { InitializeComponent(); threadAttenteConnexion = new Thread(new ThreadStart(AttenteConnexion)); // Set the TcpListener on port 13000. Int32 port = 1337; IPAddress localAddr = IPAddress.Parse("127.0.0.1"); // TcpListener server = new TcpListener(port); server = new TcpListener(localAddr, port); // Start listening for client requests. server.Start(); threadAttenteConnexion.Start(); } public void AttenteConnexion() { TcpClient tc = server.AcceptTcpClient(); this.Invoke(this.GestionConnexionDelegate, new object[] { tc }); server.Stop(); } [...] private void Form1_FormClosing(object sender, FormClosingEventArgs e) { threadAttenteConnexion.Join(); }
Je me doute que le thread est bloqué sur "TcpClient tc = server.AcceptTcpClient();", mais est ce qu'on ne peut pas le tuer quand même proprement?
Est ce que quelqu'un peut me dire ce que j'ai oublié de faire? (ou mal fait?).
J'ai tenté également threadAttenteConnexion.Abord() mais sans plus de succès...
Merci d'avance pour votre aide
Partager