能不用catch就别用catch while (br.BaseStream.Position < br.BaseStream.Length)
{
    account = br.ReadInt16();
    dayOfYear = br.ReadInt16();
    year = br.ReadInt16();
    amount = br.ReadInt32();
    richTextBox1.Text += "Account: " + account + "  DayOfYear: " + 
        dayOfYear + "  Year: " + year + "  Amount: " + amount + "\n";}

解决方案 »

  1.   

    结果还是一样啊,一直死循环,如果用for指定只读前100条数据就不会有问题,为什么呢?
      

  2.   

    可以参考Stream的Read方法:
    public abstract int Read (
    [InAttribute] [OutAttribute] byte[] buffer,
    int offset,
    int count
    )
    这个方法从当前流中读取最多的 count 个字节,并将它们存储在从 offset 开始的 buffer 中。流中的当前位置提升已读取的字节数;但是,如果出现异常,流中的当前位置保持不变。实现返回已读取的字节数。仅当位置当前位于流的末尾时,返回值才为零。如果没有任何可用的数据,该实现将一直阻塞到至少有一个字节的数据可读为止。仅当流中不再有其他的数据,而且也不再需要更多的数据(如已关闭的套接字或文件尾)时,Read 才返回 0。即使尚未到达流的末尾,实现仍可以随意返回少于所请求的字节。