Сделайте специальную логическую переменную, указывающую, что форма собирается закрыться. Проверьте его значение в фоновом потоке и прервите цикл, если оно истинно. В основной форме установите значение переменной в true и вызовите thServer.Join (), чтобы дождаться окончания потока. Тогда вы можете безопасно закрыть
форма. Примерно так:
В обработчике закрытия формы:
abortThread = true;
thServer.Join();
В цикле потока сервера:
while (true)
{
if (abortThread)
break;
TcpClient client = server.AcceptTcpClient();
...
}