读书人

测试的一个内存储器流.为何停住

发布时间: 2013-07-20 11:07:48 作者: rapoo

测试的一个内存流.为何停住?

//写入并读取.
void WriteAndRead(object sender, EventArgs e) {
byte[] bytesFromEncodingInput = Encoding.Default.GetBytes(txtInput.Text); //选择默认编码.
MemoryStream mStream = new MemoryStream(20);
mStream.Write(bytesFromEncodingInput, 0, bytesFromEncodingInput.Length); //写入内存流.
richTxtProperties.Text = string.Format("分配给内存流的字节数为 {0},流长度为 {1},当前流位置为 {2}", mStream.Capacity, mStream.Length, mStream.Position);

mStream.Seek(0, SeekOrigin.Begin); //将流的位置设为最开始.
int readPosition = 0; //流的位置.
while(readPosition < mStream.Length - 1) {
byte[] bytesFromMStreamRead = new byte[5]; //流每次读取后存放的数组.
mStream.Read(bytesFromMStreamRead, readPosition, bytesFromMStreamRead.Length);
char[] cResult = new char[Encoding.Default.GetCharCount(bytesFromMStreamRead)]; //存放解析后的字节数组.
Encoding.Default.GetChars(bytesFromMStreamRead, readPosition, bytesFromMStreamRead.Length, cResult, 0);
foreach(var r in cResult) {
richTxtContent.Text += r.ToString();
}
mStream.Flush(); //情况缓冲区.
}
}
/*
为了能分段给用户返回内存读取数据,而不是一致性读取后返回给用户,我这样做.
我调试的时候,发现我的"richTxtContent"的Text"是我输入的哈....
但是运行的时候,无法回到页面.


*/


[解决办法]

while(readPosition < mStream.Length - 1) <------------
{
byte[] bytesFromMStreamRead = new byte[5]; //流每次读取后存放的数组.
mStream.Read(bytesFromMStreamRead, readPosition, bytesFromMStreamRead.Length);
char[] cResult = new char[Encoding.Default.GetCharCount(bytesFromMStreamRead)]; //存放解析后的字节数组.
Encoding.Default.GetChars(bytesFromMStreamRead, readPosition, bytesFromMStreamRead.Length, cResult, 0);
foreach(var r in cResult) {
richTxtContent.Text += r.ToString();
}
mStream.Flush(); //情况缓冲区.
}



死循环了呀。readPosition 一直为0

读书人网 >C#

热点推荐