La forme:
Mouais... envoyer des messages sur la fenêtre de chat à la fermeture, c'est pas vraiment une riche idée. Et encore moins le "refresh", là c'est une très mauvaise idée.
Sinon, on évite en général d'utiliser les évènements de la classe elle-même, car c'est inutilement lourd. C'est à cela que servent les methodes Overrides (override en C#).
Le fond:
Sur le fond, tu peux en effet faire comme suggère tifoux (en gros l'équivalent d'un "kill" sur le thread, accompagnée de l'arrêt de la connection). Cependant, avec Thread.Abort, tu provoques la génération immédiate d'une exception ThreadAbortException. Ainsi tu ne maîtrises rien dans la façon dont le thread se terminera : cela peut être par exemple au milieu de l'écriture dans un fichier.
Pour faire les choses proprement, il vaudrait mieux communiquer avec le thread pour lui signifier qu'il doit s'arrêter. Après, tout dépend si tu veux faire simple ou propre... :ugeek:
Il existe plusieurs façons de communiquer avec un thread. Le plus simple, c'est d'utiliser une variable (genre stopNow). Par contre, en C# il faut définir cette variable avec l'attribut volatile. En VB, il faut utiliser VolatileRead/VolatileWrite ou Synclock.