Rozwiązaniem łopatologicznym było by stworzenie globalnej tablicy string-ów lub boolean-ów o wielkości dopuszczalnych jednoczesnych połączeń i przekazwywanie w parametrze do HandleClientComm(object client) dodatkowo Id do którego elementu tablicy dany wątek ma się odnosić i w odpowiednim momencie w kodzie HandleClientComm sprawdzać element tablicy, wyświetlić komunikat i bezpiecznie zamknąć połączenie. Problem że wszystkie wątki odwoływały by się do jednej tablicy co pewnie wywali exeption ale przy użyciu semaforów na pewno jakoś by się to dało z synchronizować. Kolejny problem że każdy wątek będzie oczekiwał na wszystkie inne, aż zwolnią dostęp do tej zmiennej i o ile to będzie parę połączeń to może i to będzie działać o tyle jeżeli to będzie 100 wątków to nie jestem pewien. I do tego oczywiście z poziomu twojego programu czyli wątku głównego chcąc zamknąć dany wątek odpowiedni do Id element tablicy ustawiasz na true lub wpisujesz jakiś komunikat. Teoretycznie powinno działać:)
Pozdrawiam
PS. Zaciekawił mnie temat i doszkoliłem się przy okazji trochę z wątków. Okazuje się że w tym przypadku obejdzie się bez semaforów locków itp. Polecam artykuł: Bezpieczny dostęp do danych. I przy okazji napisałem prosty kod dla sprawdzenia.
static private bool[] StopThread = new bool[10];
static void Main(string[] args)
{
for (int i = 0; i < 10; i++)
{
StopThread[i] = false;
Thread T = new Thread(new ParameterizedThreadStart(DoWorkT));
T.Start((object)i);
}
while (true)
{
LogMessage(string.Format("Wpisz nr wątku do zamknięcia: "));
string nr = System.Console.ReadLine();
StopThread[Convert.ToInt16(nr)] = true;
}
}
static private void DoWorkT(object arg)
{
int T_id = (int)arg;
LogMessage(string.Format("Wątek nr. {0} uruchomiony", T_id));
while (true)
{
if (StopThread[T_id])
{
LogMessage(string.Format("Wątek nr. {0} Zakończony", T_id));
Thread.CurrentThread.Abort();
}
}
}