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 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
- 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
unIDisposable
objeto (o al método deDisposeAsync
unIDisposableAsync
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, elClose
método proporciona la implementación pública de un tipo del IDisposable.Dispose método . Lo mismo ocurre conCloseAsync
y<xref:System.IAsyncDisposable.DisposeAsync%2A?displayProperty=nameWithType>
.Ha llamado varias veces a los métodos o
DisposeAsync
deDispose
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 |
ThrowIf(Boolean, Type) |
Produce si ObjectDisposedException el objeto especificado |
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) |