Freigeben über


ObjectDisposedException Klasse

Definition

Die Ausnahme, die beim Ausführen einer Operation für ein freigegebenes Objekt ausgelöst wird.

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
Vererbung
ObjectDisposedException
Vererbung
Attribute

Beispiele

Im folgenden Beispiel wird ein Fehler veranschaulicht, der dazu führt, dass die ObjectDisposedException Ausnahme ausgelöst wird.

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

Dieser Code erzeugt die folgende Ausgabe:

Caught:  
  Cannot access a closed Stream.  

Hinweise

Es ObjectDisposedException wird ausgelöst, wenn Sie versuchen, auf ein Element eines Objekts zuzugreifen, das die IDisposable Schnittstelle oder IAsyncDisposable Schnittstelle implementiert, und dieses Objekt wurde verworfen. In der Regel wird diese Ausnahme durch eine der folgenden Bedingungen verursacht:

  • Sie haben die Dispose Methode eines Objekts (oder die Methode eines IDisposableAsync ObjektsDisposeAsync) aufgerufenIDisposable, und Sie versuchen, auf ein Instanzmitglied zuzugreifen, das den Zustand des Objekts abruft oder festlegt. Im folgenden Beispiel wird das ObjectDisposedException ausgelöst, wenn Sie versuchen, die Häufigkeit der Zeitgeberbenachrichtigungen zurückzusetzen, nachdem Sie die Timer.Dispose Methode aufgerufen haben.

    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()
    
  • Sie haben die Methode eines Objekts Close aufgerufen, und Sie versuchen, auf ein Instanzmitglied zuzugreifen, das den Zustand des Objekts abruft oder festlegt. Häufig stellt die Close Methode die öffentliche Implementierung der IDisposable.Dispose Methode eines Typs bereit. Das gleiche gilt für CloseAsync und <xref:System.IAsyncDisposable.DisposeAsync%2A?displayProperty=nameWithType>.

  • Sie haben die Methoden oder DisposeAsync Methoden eines Objekts Dispose mehrmals aufgerufen. In der Regel löst dies keine Ausnahme aus. Abhängig davon, wie ein Typ implementiert IDisposable.Dispose oder IAsyncDisposable.DisposeAsync, kann es jedoch nicht zulassen, dass mehrere Aufrufe dieser Methode aufgerufen werden.

In den meisten Fällen führt diese Ausnahme zu einem Entwicklerfehler. Statt den Fehler in einem try/catch Block zu behandeln, sollten Sie den Fehler in der Regel korrigieren, indem Sie das Objekt erneut überprüfen.

Konstruktoren

ObjectDisposedException(SerializationInfo, StreamingContext)

Initialisiert eine neue Instanz der ObjectDisposedException-Klasse mit serialisierten Daten.

ObjectDisposedException(String)

Initialisiert eine neue Instanz der ObjectDisposedException-Klasse mit einer Zeichenfolge, die den Namen des freigegebenen Objekts enthält.

ObjectDisposedException(String, Exception)

Initialisiert eine neue Instanz der ObjectDisposedException-Klasse mit einer angegebenen Fehlermeldung und einem Verweis auf die innere Ausnahme, die diese Ausnahme ausgelöst hat.

ObjectDisposedException(String, String)

Initialisiert eine neue Instanz der ObjectDisposedException-Klasse mit dem angegebenen Objektnamen und der Meldung.

Eigenschaften

Data

Ruft eine Auflistung von Schlüssel-Wert-Paaren ab, die zusätzliche benutzerdefinierte Informationen zur Ausnahme bereitstellen.

(Geerbt von Exception)
HelpLink

Ruft einen Link zur Hilfedatei ab, die dieser Ausnahme zugeordnet ist, oder legt einen Link fest.

(Geerbt von Exception)
HResult

Ruft HRESULT ab oder legt HRESULT fest. Dies ist ein codierter Wert, der einer bestimmten Ausnahme zugeordnet ist.

(Geerbt von Exception)
InnerException

Ruft die Exception-Instanz ab, die die aktuelle Ausnahme verursacht hat.

(Geerbt von Exception)
Message

Ruft die Meldung ab, in der der Fehler beschrieben wird.

ObjectName

Ruft den Namen des freigegebenen Objekts ab.

Source

Gibt den Namen der Anwendung oder des Objekts zurück, die bzw. das den Fehler verursacht hat, oder legt diesen fest.

(Geerbt von Exception)
StackTrace

Ruft eine Zeichenfolgendarstellung der unmittelbaren Frames in der Aufrufliste ab.

(Geerbt von Exception)
TargetSite

Ruft die Methode ab, die die aktuelle Ausnahme auslöst.

(Geerbt von Exception)

Methoden

Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
GetBaseException()

Gibt beim Überschreiben in einer abgeleiteten Klasse eine Exception zurück, die die Grundursache für eine oder mehrere nachfolgende Ausnahmen ist.

(Geerbt von Exception)
GetHashCode()

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetObjectData(SerializationInfo, StreamingContext)

Ruft das SerializationInfo-Objekt mit dem Parameternamen und zusätzlichen Informationen zur Ausnahme ab.

GetObjectData(SerializationInfo, StreamingContext)

Legt beim Überschreiben in einer abgeleiteten Klasse die SerializationInfo mit Informationen über die Ausnahme fest.

(Geerbt von Exception)
GetType()

Ruft den Laufzeittyp der aktuellen Instanz ab.

(Geerbt von Exception)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
ThrowIf(Boolean, Object)

Löst ein ObjectDisposedException , wenn der angegebene condition Wert ist true.

ThrowIf(Boolean, Type)

Löst ein ObjectDisposedException , wenn der angegebene condition Wert ist true.

ToString()

Erstellt eine Zeichenfolgendarstellung der aktuellen Ausnahme und gibt diese zurück.

(Geerbt von Exception)

Ereignisse

SerializeObjectState
Veraltet.

Tritt auf, wenn eine Ausnahme serialisiert wird, um ein Ausnahmezustandsobjekt mit serialisierten Daten über die Ausnahme zu erstellen.

(Geerbt von Exception)

Gilt für

Siehe auch