我在我的程序中,基本上是读取一个文件,对其进行一些处理,然后将其作为内存流返回给主程序,该内存流将由一个流阅读器处理。所有这些都将由我的主类旁边的一个类处理。
问题是,在另一个类的方法中返回内存流时,“canread”变量被设置为false,从而导致流阅读器初始化失败。
以下是问题发生的示例(虽然在这里我是在另一个类中写入内存流,但当我将其传回时仍会导致相同的错误)。
在名为“Otherclass”的类中:
public static MemoryStream ImportantStreamManipulator()
{
MemoryStream MemStream = new MemoryStream();
StreamWriter writer = new StreamWriter(MemStream);
using (writer)
{
//Code that writes stuff to the memorystream via streamwriter
return MemStream;
}
}
主程序中的函数调用:
MemoryStream MStream = Otherclass.ImportantStreamManipulator();
StreamReader reader = new StreamReader(MStream);
当我在"return MemStream"上设置断点时,"CanRead"属性仍然为true。一旦我跳出该函数并将返回值写入MStream后,"CanRead"属性就会变为false。这会导致StreamReader抛出异常,表示无法读取MStream(因为该属性指示不可读)。数据已经按照预期存储在流的缓冲区中,但是我只是无法将其取出。如何设置使得当它返回到我的主函数时,“CanRead”将报告为true?或者我是否误解了MemoryStream的工作原理?我应该如何实现我想要做的事情?
stream
之前writer
被垃圾回收了会发生什么? - Kevin BrockStreamWriter
没有终结器。 - Jon SkeetStreamWriter
。它没有任何非托管资源。在最后一次使用后,它会在任何时候被垃圾回收 - 可能是在Flush
调用之后直接清理。 - Jon Skeet