2012-06-26 133 views
5

確實,這並不一定意味着流已被代碼拋棄 - 無論是使用還是調用dispose。System.ObjectDisposedException:無法訪問關閉的流

流可能已經被關閉在這段代碼之外,這個異常仍然會發生?

+1

是完全相同.... –

+0

@PhilipDaubmeier - 你應該展開來回答別人不前。這是一個有效的問題,可能不會結束,它需要一個答案。你是第一個。拿信譽,男人! – David

+1

如果您向我們展示代碼,我們也許能夠向您指出問題的來源... –

回答

5

因此,我會將我的評論作爲答案:是的,您可以從代碼之外關閉流,因此請確保您檢查System.ObjectDisposedException

有幾種情況會發生這種情況:想象一下與網絡連接相關的流,並且連接突然中斷。根據實現的不同,這可能會關閉流並在訪問流時拋出特定異常。

1

流可能已被關閉此代碼之外,這種異常仍會發生?

是的。例如 - 如果您在另一個流中封裝流並丟棄「包裝器」流,則會發生這種情況。許多實現處理它們正在打包的流。

如果您嘗試寫入「包裝」流,則會收到此錯誤消息。

在使用或通過調用處置。

另外還要認識到,對於具有Close()方法的對象,如StreamCloseDispose通常執行相同的功能。關閉一個流也會處理它。

0

如果requestLengthDiskThreshold小於您嘗試通過流上傳/處理的文件的大小,也會發生此錯誤。這是在你的web.config中定義:

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

如果您在loook的第二個參數在這裏的解釋:

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

,你會看到,它設置輸入流緩衝閾值(以千字節計)。默認值是80KB,所以如果你沒有設置這個值,並且你嘗試,例如,ajax上傳大於80KB的文件,你將得到System.ObjectDisposedException異常,因爲一旦達到閾值限制,流將被關閉。

在我的情況,我的閾值設置爲500MB ...

相關問題