The read/write portions of the TcpClient are thread safe, as explained in the documentation for the NetworkStream class (which is what the TcpClient uses for it's actual IO):
Read and write operations can be
performed simultaneously on an
instance of the NetworkStream class
without the need for synchronization.
As long as there is one unique thread
for the write operations and one
unique thread for the read operations,
there will be no cross-interference
between read and write threads and no
synchronization is required.
To do with the closing, if you close the TcpClient on one thread, but then try to read/write using it on another thread after it is closed, an exception will be thrown. You can either synchronise the threads before it is closed in order to prevent them using the TcpClient, or just catch and handle the exception (for example, you might exit the thread's executing loop).