9

这是真的吗,这并不一定意味着流已被代码处理 - 无论是在使用中还是通过调用 dispose.

流可能已在此代码之外关闭,并且仍然会发生此异常?

4

3 回答 3

7

所以我会把我的评论作为一个答案:是的,一个流也可以从你的代码外部关闭,所以一定要检查一个System.ObjectDisposedException.

有几种情况可能会发生这种情况:例如,想象一个与网络连接相关的流并且连接突然中断。根据实现,这可能会关闭流并在访问流时抛出该特定异常。

于 2012-06-26T15:44:34.183 回答
4

流可能已在此代码之外关闭,并且仍然会发生此异常?

是的。例如 - 如果您将流包装在另一个流中并处置“包装器”流,则可能会发生这种情况。许多实现处理它们包装的流。

如果您随后尝试写入“包装”流,您将收到此错误消息。

无论是在使用中还是通过调用 dispose。

还要意识到,对于具有Close()方法的对象,例如StreamClose并且Dispose通常执行相同的功能。关闭流也会处理它。

于 2012-06-26T15:43:49.283 回答
3

如果 requestLengthDiskThreshold 小于您尝试通过流上传/处理的文件的大小,也会发生此错误。这是在您的 web.config 中定义的:

<httpRuntime maxRequestLength="512000" requestLengthDiskThreshold="512000" />

如果您在这里查看第二个参数的解释:

https://msdn.microsoft.com/en-us/library/system.web.configuration.httpruntimesection.requestlengthdiskthreshold(v=vs.110).aspx

您将看到它设置了输入流缓冲阈值(以千字节为单位)。默认值为 80KB,因此如果您没有设置此值并且您尝试使用 ajax 上传大于 80KB 的文件,您将收到 System.ObjectDisposedException 异常,因为一旦达到阈值限制,流将被关闭.

就我而言,我将阈值设置为 500MB ...

于 2016-11-28T15:25:14.410 回答