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