ObjectDisposedException Classe

Definição

A exceção que é gerada quando uma operação é executada em um objeto descartado.The exception that is thrown when an operation is performed on a disposed object.

public ref class ObjectDisposedException : InvalidOperationException
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public class ObjectDisposedException : InvalidOperationException
type ObjectDisposedException = class
    inherit InvalidOperationException
Public Class ObjectDisposedException
Inherits InvalidOperationException
Herança
Atributos

Exemplos

O exemplo a seguir demonstra um erro que faz ObjectDisposedException com que a exceção seja gerada.The following example demonstrates an error that causes the ObjectDisposedException exception to be thrown.

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);
      }
   }
}
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

Esse código gera a seguinte saída:This code produces the following output:

Caught:  
  Cannot access a closed Stream.  

Comentários

Um ObjectDisposedException é gerado quando você tenta acessar um membro de um objeto que implementa a IDisposable interface e esse objeto foi Descartado.An ObjectDisposedException is thrown when you try to access a member of an object that implements the IDisposable interface, and that object has been disposed. Normalmente, essa exceção é causada por uma das seguintes condições:Typically, this exception is caused by one of the following conditions:

  • Você chamou o método de Dispose um objeto e está tentando acessar um membro de instância que Obtém ou define o estado do objeto.You've called an object's Dispose method, and you're trying to access an instance member that gets or sets the object's state. O exemplo a seguir ilustra ObjectDisposedException o que é gerado quando você tenta redefinir a frequência das notificações de temporizador depois de Timer.Dispose chamar o método.The following example illustrates the ObjectDisposedException that is thrown when you try to reset the frequency of timer notifications after you call the Timer.Dispose method.

    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()
    
    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.You've called an object's Close method, and you're trying to access an instance member that gets or sets the object's state. Geralmente, o Close método fornece a implementação pública IDisposable.Dispose de um tipo do método.Often, the Close method provides a type's public implementation of the IDisposable.Dispose method.

  • Você chamou o método de Dispose um objeto várias vezes.You've called an object's Dispose method multiple times. Normalmente, isso não gera uma exceção.Typically, this doesn't throw an exception. No entanto, dependendo de como um tipo IDisposable.Disposeimplementa, ele não pode permitir várias chamadas Disposepara.However, depending on how a type implements IDisposable.Dispose, it may not allow multiple calls to Dispose.

Na maioria dos casos, essa exceção resulta de erro do desenvolvedor.In most cases, this exception results from developer error. Em vez de manipular o erro em try um / catch bloco, você deve corrigir o erro, normalmente, reinstanciando o objeto.Instead of handling the error in a try/catch block, you should correct the error, typically by reinstantiating the object.

Construtores

ObjectDisposedException(SerializationInfo, StreamingContext)

Inicializa uma nova instância da classe ObjectDisposedException com dados serializados.Initializes a new instance of the ObjectDisposedException class with serialized data.

ObjectDisposedException(String)

Inicializa uma nova instância da classe ObjectDisposedException com uma cadeia de caracteres que contém o nome do objeto descartado.Initializes a new instance of the ObjectDisposedException class with a string containing the name of the disposed object.

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.Initializes a new instance of the ObjectDisposedException class with a specified error message and a reference to the inner exception that is the cause of this exception.

ObjectDisposedException(String, String)

Inicializa uma nova instância da classe ObjectDisposedException com o nome do objeto e a mensagem especificados.Initializes a new instance of the ObjectDisposedException class with the specified object name and message.

Propriedades

Data

Obtém uma coleção de pares de chave/valor que fornecem informações adicionais definidas pelo usuário sobre a exceção.Gets a collection of key/value pairs that provide additional user-defined information about the exception.

(Herdado de Exception)
HelpLink

Obtém ou define um link para o arquivo de ajuda associado a essa exceção.Gets or sets a link to the help file associated with this exception.

(Herdado de Exception)
HResult

Obtém ou define HRESULT, um valor numérico codificado que é atribuído a uma exceção específica.Gets or sets HRESULT, a coded numerical value that is assigned to a specific exception.

(Herdado de Exception)
InnerException

Obtém a instância Exception que causou a exceção atual.Gets the Exception instance that caused the current exception.

(Herdado de Exception)
Message

Obtém a mensagem que descreve o erro.Gets the message that describes the error.

ObjectName

Obtém o nome do objeto descartado.Gets the name of the disposed object.

Source

Obtém ou define o nome do aplicativo ou objeto que causa o erro.Gets or sets the name of the application or the object that causes the error.

(Herdado de Exception)
StackTrace

Obtém uma representação de cadeia de caracteres de quadros imediatos na pilha de chamadas.Gets a string representation of the immediate frames on the call stack.

(Herdado de Exception)
TargetSite

Obtém o método que gerou a exceção atual.Gets the method that throws the current exception.

(Herdado de Exception)

Métodos

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.Determines whether the specified object is equal to the current object.

(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.When overridden in a derived class, returns the Exception that is the root cause of one or more subsequent exceptions.

(Herdado de Exception)
GetHashCode()

Serve como a função de hash padrão.Serves as the default hash function.

(Herdado de Object)
GetObjectData(SerializationInfo, StreamingContext)

Recupera o objeto SerializationInfo com o nome do parâmetro e informações adicionais de exceção.Retrieves the SerializationInfo object with the parameter name and additional exception information.

GetType()

Obtém o tipo de tempo de execução da instância atual.Gets the runtime type of the current instance.

(Herdado de Exception)
MemberwiseClone()

Cria uma cópia superficial do Object atual.Creates a shallow copy of the current Object.

(Herdado de Object)
ToString()

Cria e retorna uma representação de cadeia de caracteres da exceção atual.Creates and returns a string representation of the current exception.

(Herdado de Exception)

Eventos

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.Occurs when an exception is serialized to create an exception state object that contains serialized data about the exception.

(Herdado de Exception)

Aplica-se a

Veja também