使用System.IO.MemoryStream类时遇到问题。
创建后,如下:
var memory = new MemoryStream();
然后设置要写入的一些字节的长度。
var length = 181;
memory.SetLength( length);
然后在调试器中,内存显示长度和
位置BOTH设置为181.在单独的测试程序中
it属性显示SetLength()
后位置仍为零。
此外,如果我使用将Position
属性更改为0
调试器或添加一行代码,它会忽略
并且仍然显示181作为位置属性。就这样吧
表现得好像不可变。
然而,再次在简单的单元测试中,这可以按预期工作。
起初,这似乎是一个线程问题 如果MemoryStream不是线程安全的。但在调试器中, 在调用任何此代码之前,我冻结了所有其他线程。 它仍然如上所述失败。
嗯,这是最离奇的。任何想法尝试什么?
答案 0 :(得分:2)
我看不出和你一样的东西。如果我在Main中使用以下代码创建一个控制台应用程序:
var x = new MemoryStream();
x.SetLength(181);
..并追踪调用SetLength
,调试器显示Length
等于181,Position
等于0.你必须还有别的东西影响你的流对象。
答案 1 :(得分:0)
实际上,想出了问题所在。第一个线索是它只发生在调试器中。
原因是覆盖了ToString()方法。
正在读取内存并在调试器中显示它。那是从记忆中读取并因此修改位置。
问题解决了。
感谢。