2012-06-26 53 views
5

È vero che questo non significa necessariamente che il flusso è stato eliminato dal codice, in un utilizzo o chiamando dispose.System.ObjectDisposedException: Impossibile accedere a un flusso chiuso

Lo stream potrebbe essere stato chiuso al di fuori di questo codice e questa eccezione si verificherebbe ancora?

+1

Sì, esattamente .... –

+0

@PhilipDaubmeier - si dovrebbe estendere che per una risposta prima che qualcun altro lo fa. Questa è una domanda valida che probabilmente non si chiuderà e ha bisogno di una risposta. Sei stato il primo Prendi il merito, amico! – David

+1

Se ci mostri il codice, saremo forse in grado di indicarti la fonte del tuo problema ... –

risposta

5

Quindi farò il mio commento una risposta: Sì, uno stream potrebbe anche essere chiuso al di fuori del tuo codice, quindi assicurati di controllare uno System.ObjectDisposedException.

Ci sono diverse occasioni in cui ciò potrebbe accadere: immagina per esempio un flusso associato a una connessione di rete e la connessione viene improvvisamente interrotta. A seconda dell'implementazione, questo potrebbe chiudere il flusso e generare quella particolare eccezione se si accede allo stream.

1

Lo stream potrebbe essere stato chiuso al di fuori di questo codice e questa eccezione si verificherebbe ancora?

Sì. Ad esempio: questo può accadere se si avvolge un flusso all'interno di un altro stream e si dispone del flusso "wrapper". Molte implementazioni dispongono del flusso che stanno avvolgendo.

Se si tenta di scrivere nel flusso "wrapped", riceverai questo messaggio di errore.

sia in un utilizzo che chiamando dispose.

realizzano inoltre che, per gli oggetti che hanno un metodo Close(), come Stream, Close e Dispose eseguire tipicamente la stessa funzione. Anche la chiusura di un flusso ne dispone.

0

Questo errore può verificarsi anche se requestLengthDiskThreshold è inferiore alla dimensione del file che si sta tentando di caricare/gestire tramite lo stream. Questo è definito nel web.config:

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

Se loook alla spiegazione per il 2 ° parametro qui:

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

vedrete che definisce la soglia di ingresso-stream di buffering (in kilobyte). Il valore predefinito è 80 KB, quindi se non si dispone di questo valore impostato e si prova, ad esempio, a caricare aax il file più grande di 80 KB, si otterrà l'eccezione System.ObjectDisposedException poiché il flusso verrà chiuso una volta raggiunto il limite di soglia .

Nel mio caso sto impostando la soglia di 500 MB ...

Problemi correlati