MultiThreaded TCP Server with high CPU usage
Big picture, you probably don't want to allocate and start a new thread to handle each incoming connection.  .Net has a very good ThreadPool implementation that scales up to as many threads as your machine can support without creating so many that performance suffers.

That said, it looks like your particular problem is that threads are never allowed to complete.  bClientConnected is the control variable for your main while loop, and it is never set to false, even if an exception is thrown.  You should always be suspicious of a catch that doesn't rethrow or at least exit the current function.