Tuez le thread c du serveur multi-threading

J’ai un programme qui démarre un thread de serveur, dans ce thread j’attends des connexions d’utilisateur, mais parfois (si l’utilisateur appuie sur “E”) je veux fermer ce thread de serveur mais il ne fonctionne pas. j’ai essayé

'thread'.abort() - but it's freezing and not stopping the thread 

ici le code serveur:

  private void start() { try { this.serverSocket = new TcpListener(8888); // creating the Server TCP socket this.clientSocket = default(TcpClient); // creating the User socket variable // starting the server this.serverSocket.Start(); Console.WriteLine("->> server started"); // printing to log // for always while (true) { counter += 1; // new user this.clientSocket = this.serverSocket.AcceptTcpClient(); // accepting user Console.WriteLine(" ->> User connected"); // printing to log // User creatinon ConnectedUser user = new ConnectedUser(this.clientSocket); user.startListerner(); } this.clientSocket.Close(); this.serverSocket.Stop(); Console.WriteLine(" >> " + "exit"); Console.ReadLine(); } catch { Console.WriteLine("Error launching the Server"); } } 

et je le lance de cette façon:

 this.server = new Thread(start); server.Start(); 

Je veux y mettre fin, comment puis-je le faire?

Vous devrez utiliser un CancellationTokenSource pour signaler à votre thread de se terminer. L’utilisation de Thread.Abort n’est pas recommandée car elle met fin au thread sans le laisser correctement nettoyer en premier.

Pour utiliser le jeton d’annulation, vous créez une instance de CancellationTokenSource , puis transmettez le jeton à votre fonction de thread (ou à un object qui enveloppe le nouvel état de thread). Dans la fonction thread, vous pouvez vérifier IsCancellationRequested propriété Si le thread doit s’arrêter, vous pouvez transmettre le même jeton d’annulation aux fonctions d’E / S pour tenter d’annuler une opération de blocage.

Lisez cette question / réponse pour plus de détails sur les problèmes possibles causés par Thread.Abort . Lisez spécifiquement la réponse d’Eric Lippert à cette question où il mentionne de ne jamais lancer un fil que vous ne pouvez pas arrêter poliment.