ObjectDisposedException Clase

Definición

Excepción que se produce cuando se realiza una operación en un objeto desechado.

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
Herencia
ObjectDisposedException
Herencia
Atributos

Ejemplos

En el ejemplo siguiente se muestra un error que hace que se produzca la ObjectDisposedException excepción.

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

Este código genera el siguiente resultado:

Caught:  
  Cannot access a closed Stream.  

Comentarios

ObjectDisposedException Se produce una excepción cuando se intenta obtener acceso a un miembro de un objeto que implementa la IDisposable interfaz o IAsyncDisposable interfaz, y ese objeto se ha eliminado. Normalmente, esta excepción se debe a una de las condiciones siguientes:

  • Ha llamado al método de Dispose un IDisposable objeto (o al método de DisposeAsync un IDisposableAsync objeto) y está intentando acceder a un miembro de instancia que obtiene o establece el estado del objeto. En el ejemplo siguiente se muestra el ObjectDisposedException que se produce al intentar restablecer la frecuencia de las notificaciones del temporizador después de llamar al Timer.Dispose método .

    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()
    
  • Ha llamado al método de Close un objeto y está intentando acceder a un miembro de instancia que obtiene o establece el estado del objeto. A menudo, el Close método proporciona la implementación pública de un tipo del IDisposable.Dispose método . Lo mismo ocurre con CloseAsync y <xref:System.IAsyncDisposable.DisposeAsync%2A?displayProperty=nameWithType>.

  • Ha llamado varias veces a los métodos o DisposeAsync de Dispose un objeto. Normalmente, esto no produce una excepción. Sin embargo, dependiendo de cómo implementa IDisposable.Dispose un tipo o IAsyncDisposable.DisposeAsync, es posible que no permita varias llamadas a ese método.

En la mayoría de los casos, esta excepción resulta del error del desarrollador. En lugar de controlar el error en un try/catch bloque, debe corregir el error, normalmente mediante la reinstancia del objeto.

Constructores

ObjectDisposedException(SerializationInfo, StreamingContext)

Inicializa una nueva instancia de la clase ObjectDisposedException con datos serializados.

ObjectDisposedException(String)

Inicializa una nueva instancia de la clase ObjectDisposedException con una cadena que contiene el nombre del objeto desechado.

ObjectDisposedException(String, Exception)

Inicializa una nueva instancia de la clase ObjectDisposedException con el mensaje de error especificado y una referencia a la excepción interna que representa la causa de esta excepción.

ObjectDisposedException(String, String)

Inicializa una nueva instancia de la clase ObjectDisposedException con el mensaje y el nombre del objeto especificado.

Propiedades

Data

Obtiene una colección de pares clave/valor que proporciona información definida por el usuario adicional sobre la excepción.

(Heredado de Exception)
HelpLink

Obtiene o establece un vínculo al archivo de ayuda asociado a esta excepción.

(Heredado de Exception)
HResult

Obtiene o establece HRESULT, un valor numérico codificado que se asigna a una excepción específica.

(Heredado de Exception)
InnerException

Obtiene la instancia Exception que produjo la excepción actual.

(Heredado de Exception)
Message

Obtiene el mensaje que describe el error.

ObjectName

Obtiene el nombre del objeto desechado.

Source

Devuelve o establece el nombre de la aplicación o del objeto que generó el error.

(Heredado de Exception)
StackTrace

Obtiene una representación de cadena de los marcos inmediatos en la pila de llamadas.

(Heredado de Exception)
TargetSite

Obtiene el método que produjo la excepción actual.

(Heredado de Exception)

Métodos

Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
GetBaseException()

Cuando se invalida en una clase derivada, devuelve la clase Exception que representa la causa principal de una o más excepciones posteriores.

(Heredado de Exception)
GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetObjectData(SerializationInfo, StreamingContext)

Recupera el objeto SerializationInfo con el nombre del parámetro y la información adicional de la excepción.

GetObjectData(SerializationInfo, StreamingContext)

Cuando se invalida en una clase derivada, establece SerializationInfo con información sobre la excepción.

(Heredado de Exception)
GetType()

Obtiene el tipo de tiempo de ejecución de la instancia actual.

(Heredado de Exception)
MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
ThrowIf(Boolean, Object)

Produce si ObjectDisposedException el objeto especificado condition es true.

ThrowIf(Boolean, Type)

Produce si ObjectDisposedException el objeto especificado condition es true.

ToString()

Crea y devuelve una representación de cadena de la excepción actual.

(Heredado de Exception)

Eventos

SerializeObjectState
Obsoleto.

Ocurre cuando una excepción se serializa para crear un objeto de estado de excepción que contenga datos serializados sobre la excepción.

(Heredado de Exception)

Se aplica a

Consulte también