Comparteix a través de


ObjectDisposedException Clase

Definición

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

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 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 la siguiente salida:

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 la interfaz, y ese objeto se ha eliminado. Normalmente, esta excepción se debe a una de las siguientes condiciones:

  • 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 sucede con CloseAsync y <xref:System.IAsyncDisposable.DisposeAsync*?displayProperty=nameWithType>.

  • Ha llamado a los métodos o DisposeAsync de Dispose un objeto varias veces. 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

Nombre Description
ObjectDisposedException(SerializationInfo, StreamingContext)
Obsoletos.

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

ObjectDisposedException(String, Exception)

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

ObjectDisposedException(String, String)

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

ObjectDisposedException(String)

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

Propiedades

Nombre Description
Data

Obtiene una colección de pares clave-valor que proporcionan información adicional definida por el usuario 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 Exception instancia que provocó la excepción actual.

(Heredado de Exception)
Message

Obtiene el mensaje que describe el error.

ObjectName

Obtiene el nombre del objeto eliminado.

Source

Obtiene o establece el nombre de la aplicación o el objeto que provoca el error.

(Heredado de Exception)
StackTrace

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

(Heredado de Exception)
TargetSite

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

(Heredado de Exception)

Métodos

Nombre Description
Equals(Object)

Determina si el objeto especificado es igual al objeto actual.

(Heredado de Object)
GetBaseException()

Cuando se reemplaza en una clase derivada, devuelve la Exception causa principal de una o varias excepciones posteriores.

(Heredado de Exception)
GetHashCode()

Actúa como función hash predeterminada.

(Heredado de Object)
GetObjectData(SerializationInfo, StreamingContext)
Obsoletos.

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

GetType()

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

(Heredado de Exception)
MemberwiseClone()

Crea una copia superficial del Objectactual.

(Heredado de Object)
ThrowIf(Boolean, Object)

Produce un ObjectDisposedException si el objeto especificado condition es true.

ThrowIf(Boolean, Type)

Produce un ObjectDisposedException si el objeto especificado condition es true.

ToString()

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

(Heredado de Exception)

Eventos

Nombre Description
SerializeObjectState
Obsoletos.

Se produce cuando se serializa una excepción para crear un objeto de estado de excepción que contiene datos serializados sobre la excepción.

(Heredado de Exception)

Se aplica a

Consulte también