確實,這並不一定意味着流已被代碼拋棄 - 無論是使用還是調用dispose。System.ObjectDisposedException:無法訪問關閉的流
流可能已經被關閉在這段代碼之外,這個異常仍然會發生?
確實,這並不一定意味着流已被代碼拋棄 - 無論是使用還是調用dispose。System.ObjectDisposedException:無法訪問關閉的流
流可能已經被關閉在這段代碼之外,這個異常仍然會發生?
因此,我會將我的評論作爲答案:是的,您可以從代碼之外關閉流,因此請確保您檢查System.ObjectDisposedException
。
有幾種情況會發生這種情況:想象一下與網絡連接相關的流,並且連接突然中斷。根據實現的不同,這可能會關閉流並在訪問流時拋出特定異常。
流可能已被關閉此代碼之外,這種異常仍會發生?
是的。例如 - 如果您在另一個流中封裝流並丟棄「包裝器」流,則會發生這種情況。許多實現處理它們正在打包的流。
如果您嘗試寫入「包裝」流,則會收到此錯誤消息。
在使用或通過調用處置。
另外還要認識到,對於具有Close()
方法的對象,如Stream
,Close
和Dispose
通常執行相同的功能。關閉一個流也會處理它。
如果requestLengthDiskThreshold小於您嘗試通過流上傳/處理的文件的大小,也會發生此錯誤。這是在你的web.config中定義:
<httpRuntime maxRequestLength="512000" requestLengthDiskThreshold="512000" />
如果您在loook的第二個參數在這裏的解釋:
,你會看到,它設置輸入流緩衝閾值(以千字節計)。默認值是80KB,所以如果你沒有設置這個值,並且你嘗試,例如,ajax上傳大於80KB的文件,你將得到System.ObjectDisposedException異常,因爲一旦達到閾值限制,流將被關閉。
在我的情況,我的閾值設置爲500MB ...
是完全相同.... –
@PhilipDaubmeier - 你應該展開來回答別人不前。這是一個有效的問題,可能不會結束,它需要一個答案。你是第一個。拿信譽,男人! – David
如果您向我們展示代碼,我們也許能夠向您指出問題的來源... –