ObjectDisposedException Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
A exceção que é gerada quando uma operação é executada em um objeto descartado.
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
- Herança
- Herança
- Atributos
Exemplos
O exemplo a seguir demonstra um erro que faz com que a ObjectDisposedException
exceção seja gerada.
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 produz a seguinte saída:
Caught:
Cannot access a closed Stream.
Comentários
Um ObjectDisposedException é gerado quando você tenta acessar um membro de um objeto que implementa a interface ou IAsyncDisposable interface IDisposable e esse objeto foi descartado. Normalmente, essa exceção é causada por uma das seguintes condições:
Você chamou o método de
Dispose
umIDisposable
objeto (ou o método deDisposeAsync
umIDisposableAsync
objeto) e está tentando acessar um membro de instância que obtém ou define o estado do objeto. O exemplo a seguir ilustra o ObjectDisposedException que é gerado quando você tenta redefinir a frequência de notificações do temporizador depois de chamar o 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()
Você chamou o método de
Close
um objeto e está tentando acessar um membro de instância que obtém ou define o estado do objeto. Geralmente, oClose
método fornece a implementação pública de um tipo do IDisposable.Dispose método . O mesmo vale paraCloseAsync
e<xref:System.IAsyncDisposable.DisposeAsync%2A?displayProperty=nameWithType>
.Você chamou métodos ou
DisposeAsync
deDispose
um objeto várias vezes. Normalmente, isso não gera uma exceção. No entanto, dependendo de como um tipo implementa ou IAsyncDisposable.DisposeAsync, ele pode não permitir várias IDisposable.Dispose chamadas para esse método.
Na maioria dos casos, essa exceção resulta de erro do desenvolvedor. Em vez de manipular o erro em um try
/catch
bloco, você deve corrigir o erro, normalmente reinstalando o objeto.
Construtores
ObjectDisposedException(SerializationInfo, StreamingContext) |
Inicializa uma nova instância da classe ObjectDisposedException com dados serializados. |
ObjectDisposedException(String) |
Inicializa uma nova instância da classe ObjectDisposedException com uma cadeia de caracteres que contém o nome do objeto descartado. |
ObjectDisposedException(String, Exception) |
Inicializa uma nova instância da classe ObjectDisposedException com uma mensagem de erro especificada e uma referência à exceção interna que é a causa da exceção. |
ObjectDisposedException(String, String) |
Inicializa uma nova instância da classe ObjectDisposedException com o nome do objeto e a mensagem especificados. |
Propriedades
Data |
Obtém uma coleção de pares de chave/valor que fornecem informações definidas pelo usuário adicionais sobre a exceção. (Herdado de Exception) |
HelpLink |
Obtém ou define um link para o arquivo de ajuda associado a essa exceção. (Herdado de Exception) |
HResult |
Obtém ou define HRESULT, um valor numérico codificado que é atribuído a uma exceção específica. (Herdado de Exception) |
InnerException |
Obtém a instância Exception que causou a exceção atual. (Herdado de Exception) |
Message |
Obtém a mensagem que descreve o erro. |
ObjectName |
Obtém o nome do objeto descartado. |
Source |
Obtém ou define o nome do aplicativo ou objeto que causa o erro. (Herdado de Exception) |
StackTrace |
Obtém uma representação de cadeia de caracteres de quadros imediatos na pilha de chamadas. (Herdado de Exception) |
TargetSite |
Obtém o método que gerou a exceção atual. (Herdado de Exception) |
Métodos
Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
GetBaseException() |
Quando substituído em uma classe derivada, retorna a Exception que é a causa raiz de uma ou mais exceções subsequentes. (Herdado de Exception) |
GetHashCode() |
Serve como a função de hash padrão. (Herdado de Object) |
GetObjectData(SerializationInfo, StreamingContext) |
Recupera o objeto SerializationInfo com o nome do parâmetro e informações adicionais de exceção. |
GetObjectData(SerializationInfo, StreamingContext) |
Quando substituído em uma classe derivada, define o SerializationInfo com informações sobre a exceção. (Herdado de Exception) |
GetType() |
Obtém o tipo de runtime da instância atual. (Herdado de Exception) |
MemberwiseClone() |
Cria uma cópia superficial do Object atual. (Herdado de Object) |
ThrowIf(Boolean, Object) |
Gerará um ObjectDisposedException se o especificado |
ThrowIf(Boolean, Type) |
Gerará um ObjectDisposedException se o especificado |
ToString() |
Cria e retorna uma representação de cadeia de caracteres da exceção atual. (Herdado de Exception) |
Eventos
SerializeObjectState |
Obsoleto.
Ocorre quando uma exceção é serializada para criar um objeto de estado de exceção que contém dados serializados sobre a exceção. (Herdado de Exception) |