ObjectDisposedException Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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
- 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
DisposeunIDisposableobjeto (o al método deDisposeAsyncunIDisposableAsyncobjeto) 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
Closeun objeto y está intentando acceder a un miembro de instancia que obtiene o establece el estado del objeto. A menudo, elClosemétodo proporciona la implementación pública de un tipo del IDisposable.Dispose método . Lo mismo sucede conCloseAsyncy<xref:System.IAsyncDisposable.DisposeAsync*?displayProperty=nameWithType>.Ha llamado a los métodos o
DisposeAsyncdeDisposeun 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 |
| ThrowIf(Boolean, Type) |
Produce un ObjectDisposedException si el objeto especificado |
| 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) |