NetworkStreamについて質問です。
FTPクライアント作ってるんですが例えば

System.Net.Sockets.NetworkStream NS;
System.IO.StreamReader SR;
NS = TCP.GetStream;
SR = new System.IO.StreamReader(NS,System.Text.Encoding.Default);
string str1;
while (true) {
str1 = SR.ReadLine();
if (str1 == null) { break; }
}

のようにやると読み取る文字が無い場合、SR.ReadLine()はnullを返さず
制御が戻ってきません。

それでNetworkStreamのBeginRead EndReadを使って

AsyncCallback myCallBack = new AsyncCallback(this.OnRecvCallback);
IAsyncResult ar = this.NS.BeginRead(this.buffer,0,this.buffer.Length,myCallBack,null);
ar.AsyncWaitHandle.WaitOne();
str1 = System.Text.Encoding.ASCII.GetString(this.buffer);

public void OnRecvCallback(IAsyncResult ar) {
//
this.NS.EndRead(ar);
}

みたくしたのですが、これでも読み取るバイトが無い場合WaitOne()で止まってしまいます。
何か良い方法は無いでしょうか。