Condividi tramite


ObjectDisposedException Classe

Definizione

Eccezione generata durante l'esecuzione di un'operazione su un oggetto eliminato.

public ref class ObjectDisposedException : InvalidOperationException
public class ObjectDisposedException : InvalidOperationException
[System.Serializable]
public class ObjectDisposedException : InvalidOperationException
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public class ObjectDisposedException : InvalidOperationException
type ObjectDisposedException = class
    inherit InvalidOperationException
[<System.Serializable>]
type ObjectDisposedException = class
    inherit InvalidOperationException
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type ObjectDisposedException = class
    inherit InvalidOperationException
Public Class ObjectDisposedException
Inherits InvalidOperationException
Ereditarietà
ObjectDisposedException
Ereditarietà
Attributi

Esempio

Nell'esempio seguente viene illustrato un errore che causa la generazione dell'eccezione ObjectDisposedException .

using namespace System;
using namespace System::IO;
int main()
{
   MemoryStream^ ms = gcnew MemoryStream( 16 );
   ms->Close();
   try
   {
      ms->ReadByte();
   }
   catch ( ObjectDisposedException^ e ) 
   {
      Console::WriteLine( "Caught: {0}", e->Message );
   }

}
using System;
using System.IO;

public class ObjectDisposedExceptionTest
{
   public static void Main()
   {
      MemoryStream ms = new MemoryStream(16);
      ms.Close();
      try
      {
         ms.ReadByte();
      }
      catch (ObjectDisposedException e)
      {
         Console.WriteLine("Caught: {0}", e.Message);
      }
   }
}
open System
open System.IO

let ms = new MemoryStream 16
ms.Close()
try
    ms.ReadByte()
    |> ignore
with :? ObjectDisposedException as e ->
   printfn $"Caught: {e.Message}"
Imports System.IO

Public Class ObjectDisposedExceptionTest
   
   Public Shared Sub Main()
      Dim ms As New MemoryStream(16)
      ms.Close()
      Try
         ms.ReadByte()
      Catch e As ObjectDisposedException
         Console.WriteLine("Caught: {0}", e.Message)
      End Try
   End Sub
End Class

Questo codice genera l'output seguente:

Caught:  
  Cannot access a closed Stream.  

Commenti

Viene ObjectDisposedException generata un'eccezione quando si tenta di accedere a un membro di un oggetto che implementa l'interfaccia o IAsyncDisposable l'interfaccia IDisposable e tale oggetto è stato eliminato. In genere, questa eccezione è causata da una delle condizioni seguenti:

  • È stato chiamato il metodo di Dispose un IDisposable oggetto (o il metodo di DisposeAsync un IDisposableAsync oggetto) e si sta tentando di accedere a un membro dell'istanza che ottiene o imposta lo stato dell'oggetto. L'esempio seguente illustra l'eccezione ObjectDisposedException generata quando si tenta di reimpostare la frequenza delle notifiche timer dopo aver chiamato il Timer.Dispose metodo .

    using System;
    using System.Threading;
    
    public class Example
    {
       public static void Main()
       {
          Timer t = new Timer(TimerNotification, null,
                             100, Timeout.Infinite);
          Thread.Sleep(2000);
          t.Dispose();
    
          t.Change(200, 1000);
          Thread.Sleep(3000);
       }
    
       private static void TimerNotification(Object obj)
       {
          Console.WriteLine("Timer event fired at {0:F}", DateTime.Now);
       }
    }
    // The example displays output like the following:
    //    Timer event fired at Monday, July 14, 2014 11:54:08 AM
    //
    //    Unhandled Exception: System.ObjectDisposedException: Cannot access a disposed object.
    //       at System.Threading.TimerQueueTimer.Change(UInt32 dueTime, UInt32 period)
    //       at Example.Main()
    
    open System
    open System.Threading
    
    let timerNotification _ =
        printfn $"Timer event fired at {DateTime.Now:F}"
    
    let t = new Timer(timerNotification, null, 100, Timeout.Infinite)
    Thread.Sleep 2000
    t.Dispose()
    
    t.Change(200, 1000)
    |> ignore
    Thread.Sleep 3000
    
    // The example displays output like the following:
    //    Timer event fired at Monday, July 14, 2014 11:54:08 AM
    //
    //    Unhandled Exception: System.ObjectDisposedException: Cannot access a disposed object.
    //       at System.Threading.TimerQueueTimer.Change(UInt32 dueTime, UInt32 period)
    //       at <StartupCode$fs>.main()
    
    Imports System.Threading
    
    Module Example
       Public Sub Main()
          Dim t As New Timer(AddressOf TimerNotification, Nothing, 
                             100, Timeout.Infinite)
          Thread.Sleep(2000)
          t.Dispose()
          
          t.Change(200, 1000)                   
          Thread.Sleep(3000)
       End Sub
    
       Private Sub TimerNotification(obj As Object)
          Console.WriteLine("Timer event fired at {0:F}", Date.Now)
       End Sub
    End Module
    ' The example displays output like the following:
    '    Timer event fired at Monday, July 14, 2014 11:54:08 AM
    '    
    '    Unhandled Exception: System.ObjectDisposedException: Cannot access a disposed object.
    '       at System.Threading.TimerQueueTimer.Change(UInt32 dueTime, UInt32 period)
    '       at Example.Main()
    
  • È stato chiamato il metodo di Close un oggetto e si sta tentando di accedere a un membro dell'istanza che ottiene o imposta lo stato dell'oggetto. Spesso, il Close metodo fornisce l'implementazione pubblica di un tipo del IDisposable.Dispose metodo . Lo stesso vale per CloseAsync e <xref:System.IAsyncDisposable.DisposeAsync%2A?displayProperty=nameWithType>.

  • I metodi o DisposeAsync di Dispose un oggetto sono stati chiamati più volte. In genere, questo non genera un'eccezione. Tuttavia, a seconda del modo in cui un tipo implementa IDisposable.Dispose o IAsyncDisposable.DisposeAsync, potrebbe non consentire più chiamate a tale metodo.

Nella maggior parte dei casi, questa eccezione viene restituita dall'errore dello sviluppatore. Anziché gestire l'errore in un try/catch blocco, è consigliabile correggere l'errore, in genere reinstantindo l'oggetto.

Costruttori

ObjectDisposedException(SerializationInfo, StreamingContext)

Inizializza una nuova istanza della classe ObjectDisposedException con dati serializzati.

ObjectDisposedException(String)

Consente di inizializzare una nuova istanza della classe ObjectDisposedException con una stringa contenente il nome dell'oggetto eliminato.

ObjectDisposedException(String, Exception)

Inizializza una nuova istanza della classe ObjectDisposedException con un messaggio di errore specificato e un riferimento all'eccezione interna che è la causa dell'eccezione corrente.

ObjectDisposedException(String, String)

Consente di inizializzare una nuova istanza della classe ObjectDisposedException con il nome dell'oggetto e il messaggio specificati.

Proprietà

Data

Ottiene una raccolta di coppie chiave/valore che forniscono informazioni definite dall'utente aggiuntive sull'eccezione.

(Ereditato da Exception)
HelpLink

Ottiene o imposta un collegamento al file della Guida associato all'eccezione.

(Ereditato da Exception)
HResult

Ottiene o imposta HRESULT, un valore numerico codificato che viene assegnato a un'eccezione specifica.

(Ereditato da Exception)
InnerException

Ottiene l'istanza di Exception che ha causato l'eccezione corrente.

(Ereditato da Exception)
Message

Ottiene il messaggio nel quale è descritto l'errore.

ObjectName

Ottiene il nome dell'oggetto eliminato.

Source

Ottiene o imposta il nome dell'oggetto o dell'applicazione che ha generato l'errore.

(Ereditato da Exception)
StackTrace

Ottiene una rappresentazione di stringa dei frame immediati nello stack di chiamate.

(Ereditato da Exception)
TargetSite

Ottiene il metodo che genera l'eccezione corrente.

(Ereditato da Exception)

Metodi

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
GetBaseException()

Quando ne viene eseguito l'override in una classe derivata, restituisce l'Exception che è la causa radice di una o più eccezioni successive.

(Ereditato da Exception)
GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetObjectData(SerializationInfo, StreamingContext)

Consente di recuperare l'oggetto SerializationInfo con il nome del parametro e informazioni aggiuntive sull'eccezione.

GetObjectData(SerializationInfo, StreamingContext)

Quando ne viene eseguito l'override in una classe derivata, imposta il controllo SerializationInfo con le informazioni sull'eccezione.

(Ereditato da Exception)
GetType()

Ottiene il tipo di runtime dell'istanza corrente.

(Ereditato da Exception)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
ThrowIf(Boolean, Object)

Genera un'eccezione ObjectDisposedException se l'oggetto specificato condition è true.

ThrowIf(Boolean, Type)

Genera un'eccezione ObjectDisposedException se l'oggetto specificato condition è true.

ToString()

Crea e restituisce una rappresentazione di stringa dell'eccezione corrente.

(Ereditato da Exception)

Eventi

SerializeObjectState
Obsoleti.

Si verifica quando un'eccezione viene serializzata per creare un oggetto di stato eccezione contenente i dati serializzati relativi all'eccezione.

(Ereditato da Exception)

Si applica a

Vedi anche