这是真的吗,这并不一定意味着流已被代码处理 - 无论是在使用中还是通过调用 dispose.
流可能已在此代码之外关闭,并且仍然会发生此异常?
所以我会把我的评论作为一个答案:是的,一个流也可以从你的代码外部关闭,所以一定要检查一个System.ObjectDisposedException
.
有几种情况可能会发生这种情况:例如,想象一个与网络连接相关的流并且连接突然中断。根据实现,这可能会关闭流并在访问流时抛出该特定异常。
流可能已在此代码之外关闭,并且仍然会发生此异常?
是的。例如 - 如果您将流包装在另一个流中并处置“包装器”流,则可能会发生这种情况。许多实现处理它们包装的流。
如果您随后尝试写入“包装”流,您将收到此错误消息。
无论是在使用中还是通过调用 dispose。
还要意识到,对于具有Close()
方法的对象,例如Stream
,Close
并且Dispose
通常执行相同的功能。关闭流也会处理它。
如果 requestLengthDiskThreshold 小于您尝试通过流上传/处理的文件的大小,也会发生此错误。这是在您的 web.config 中定义的:
<httpRuntime maxRequestLength="512000" requestLengthDiskThreshold="512000" />
如果您在这里查看第二个参数的解释:
您将看到它设置了输入流缓冲阈值(以千字节为单位)。默认值为 80KB,因此如果您没有设置此值并且您尝试使用 ajax 上传大于 80KB 的文件,您将收到 System.ObjectDisposedException 异常,因为一旦达到阈值限制,流将被关闭.
就我而言,我将阈值设置为 500MB ...