C#のスレッド&TCP通信回りの勉強をかねて、簡単なチャット
プログラムを作っているのですが、1つ問題が出てきました。
システムの構成としては、チャットクライアントとチャット
サーバがあって、複数のチャットクライアントがチャットサーバ
に接続して通信を行います。

チャットクライアントでは、GUIの入力受付と、通信は別スレッドで
行っているのですが、通信スレッド側で、次のよに、読み込み状態に
してしまうと、そこで処理がブロッキングしてしまうのです。

size = networkStream.Read(data, 0, 1);

この場合、GUIで入力した内容を通信スレッドに渡しても、Readで
ブロッキング状態になっているため、サーバ側からなんらかの値が
送られてこない限り、GUIで入力した情報を送信する処理に移行して
くれないのです。

こういう場合は、どのようにプログラムを組めばいいのでしょうか?

1つのnetworkStreamを2つの通信スレッドで、送信受信に分けて
動かせばなんとかなりそうなのですが、できれば通信スレッドは1つ
ですっきりさせたいのです。

何かいい方法はあるでしょうか?