ObjectDisposedException Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
A exceção que é lançada quando uma operação é realizada sobre 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 seguinte demonstra um erro que faz com que a ObjectDisposedException exceção seja lançada.
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 gera o seguinte resultado:
Caught:
Cannot access a closed Stream.
Observações
Um ObjectDisposedException é lançado quando tentas aceder a um membro de um objeto que implementa a IDisposable interface ou IAsyncDisposable interface, e esse objeto foi eliminado. Normalmente, esta exceção é causada por uma das seguintes condições:
Chamaste o
Disposemétodo de umIDisposableobjeto (ou o método de umIDisposableAsyncobjetoDisposeAsync), e estás a tentar aceder a um membro da instância que recebe ou define o estado do objeto. O exemplo seguinte ilustra o ObjectDisposedException que é lançado quando tenta reiniciar a frequência das 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()Chamaste o
Closemétodo de um objeto e estás a tentar aceder a um membro da instância que recebe ou define o estado do objeto. Frequentemente, oClosemétodo fornece a implementação IDisposable.Dispose pública do método por parte de um tipo. O mesmo se aplica aCloseAsynce<xref:System.IAsyncDisposable.DisposeAsync*?displayProperty=nameWithType>.Já chamaste um objeto
DisposeouDisposeAsyncmétodos várias vezes. Normalmente, isto não representa exceção. No entanto, dependendo de como um tipo implementa IDisposable.Dispose ou IAsyncDisposable.DisposeAsync, pode não permitir múltiplas chamadas para esse método.
Na maioria dos casos, esta exceção resulta de erro do programador. Em vez de tratar o erro num try/catch bloco, deve corrigi-lo, normalmente reinstaurando o objeto.
Construtores
| Name | Description |
|---|---|
| ObjectDisposedException(SerializationInfo, StreamingContext) |
Inicializa uma nova instância da ObjectDisposedException classe com dados serializados. |
| ObjectDisposedException(String, Exception) |
Inicializa uma nova instância da ObjectDisposedException classe com uma mensagem de erro especificada e uma referência à exceção interna que é a causa dessa exceção. |
| ObjectDisposedException(String, String) |
Inicializa uma nova instância da ObjectDisposedException classe com o nome do objeto e a mensagem especificados. |
| ObjectDisposedException(String) |
Inicializa uma nova instância da ObjectDisposedException classe com uma string contendo o nome do objeto descartado. |
Propriedades
| Name | Description |
|---|---|
| Data |
Obtém uma coleção de pares chave/valor que fornecem informação adicional definida pelo utilizador sobre a exceção. (Herdado de Exception) |
| HelpLink |
Obtém ou define um link para o ficheiro de ajuda associado a esta exceção. (Herdado de Exception) |
| HResult |
Recebe ou define HRESULT, um valor numérico codificado atribuído a uma exceção específica. (Herdado de Exception) |
| InnerException |
Obtém a Exception instância que causou a exceção atual. (Herdado de Exception) |
| Message |
Recebe a mensagem que descreve o erro. |
| ObjectName |
Recebe o nome do objeto descartado. |
| Source |
Obtém ou define o nome do aplicativo ou o objeto que causa o erro. (Herdado de Exception) |
| StackTrace |
Obtém uma representação string dos frames imediatos na stack de chamadas. (Herdado de Exception) |
| TargetSite |
Obtém o método que lança a exceção atual. (Herdado de Exception) |
Métodos
| Name | Description |
|---|---|
| Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
| GetBaseException() |
Quando sobrescrito numa classe derivada, devolve o Exception que é a causa raiz de uma ou mais exceções subsequentes. (Herdado de Exception) |
| GetHashCode() |
Serve como função de hash predefinida. (Herdado de Object) |
| GetObjectData(SerializationInfo, StreamingContext) |
Recupera o SerializationInfo objeto com o nome do parâmetro e informações adicionais de exceção. |
| GetType() |
Obtém o tipo de execução da instância atual. (Herdado de Exception) |
| MemberwiseClone() |
Cria uma cópia superficial do atual Object. (Herdado de Object) |
| ToString() |
Cria e devolve uma representação string da exceção atual. (Herdado de Exception) |
evento
| Name | Description |
|---|---|
| SerializeObjectState |
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) |