Freigeben über


ObjectDisposedException Klasse

Definition

Die Ausnahme, die ausgelöst wird, wenn ein Vorgang für ein verworfenes Objekt ausgeführt 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 bewirkt, dass die ObjectDisposedException Ausnahme ausgelöst wird.

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

Mit diesem Code wird die folgende Ausgabe generiert:

Caught:
  Cannot access a closed Stream.

Hinweise

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

  • Sie haben die Methode eines IDisposable Objekts Dispose (oder die Methode eines IDisposableAsync Objekts DisposeAsync ) aufgerufen, und Sie versuchen, auf ein Instanzelement zuzugreifen, das den Status des Objekts abruft oder festlegt. Im folgenden Beispiel wird veranschaulicht ObjectDisposedException , dass ausgelöst wird, wenn Sie versuchen, die Häufigkeit von 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 Instanzelement zuzugreifen, das den Status des Objekts abruft oder festlegt. Häufig stellt die Methode die Close öffentliche Implementierung der IDisposable.Dispose Methode bereit. Das gleiche gilt für CloseAsync und <xref:System.IAsyncDisposable.DisposeAsync*?displayProperty=nameWithType>.

  • Sie haben die Methoden oder DisposeAsync Methoden eines Objekts Dispose mehrmals aufgerufen. In der Regel löst dies keine Ausnahme aus. Je nachdem, wie ein Typ implementiert IDisposable.Dispose wird oder IAsyncDisposable.DisposeAsyncob mehrere Aufrufe an diese Methode nicht zulässig sind.

In den meisten Fällen führt diese Ausnahme zu einem Entwicklerfehler. Anstatt den Fehler in einem try/catch Block zu behandeln, sollten Sie den Fehler korrigieren, in der Regel durch erneutes Anheften des Objekts.

Konstruktoren

Name Beschreibung
ObjectDisposedException(SerializationInfo, StreamingContext)
Veraltet.

Initialisiert eine neue Instanz der ObjectDisposedException Klasse mit serialisierten Daten.

ObjectDisposedException(String, Exception)

Initialisiert eine neue Instanz der ObjectDisposedException Klasse mit einer angegebenen Fehlermeldung und einem Verweis auf die innere Ausnahme, die die Ursache dieser Ausnahme ist.

ObjectDisposedException(String, String)

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

ObjectDisposedException(String)

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

Eigenschaften

Name Beschreibung
Data

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

(Geerbt von Exception)
HelpLink

Dient zum Abrufen oder Festlegen eines Links zur Hilfedatei, die dieser Ausnahme zugeordnet ist.

(Geerbt von Exception)
HResult

Dient zum Abrufen oder Festlegen von HRESULT, einem codierten numerischen Wert, der einer bestimmten Ausnahme zugewiesen ist.

(Geerbt von Exception)
InnerException

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

(Geerbt von Exception)
Message

Ruft die Meldung ab, die den Fehler beschreibt.

ObjectName

Ruft den Namen des verworfenen Objekts ab.

Source

Dient zum Abrufen oder Festlegen des Namens der Anwendung oder des Objekts, das den Fehler verursacht.

(Geerbt von Exception)
StackTrace

Ruft eine Zeichenfolgendarstellung der unmittelbaren Frames im Aufrufstapel ab.

(Geerbt von Exception)
TargetSite

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

(Geerbt von Exception)

Methoden

Name Beschreibung
Equals(Object)

Bestimmt, ob das angegebene Objekt dem aktuellen Objekt entspricht.

(Geerbt von Object)
GetBaseException()

Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird die Exception Ursache einer oder mehrerer nachfolgenden Ausnahmen zurückgegeben.

(Geerbt von Exception)
GetHashCode()

Dient als Standardhashfunktion.

(Geerbt von Object)
GetObjectData(SerializationInfo, StreamingContext)
Veraltet.

Ruft das SerializationInfo Objekt mit dem Parameternamen und zusätzliche Ausnahmeinformationen ab.

GetType()

Ruft den Laufzeittyp der aktuellen Instanz ab.

(Geerbt von Exception)
MemberwiseClone()

Erstellt eine flache Kopie der aktuellen Object.

(Geerbt von Object)
ThrowIf(Boolean, Object)

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

ThrowIf(Boolean, Type)

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

ToString()

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

(Geerbt von Exception)

Ereignisse

Name Beschreibung
SerializeObjectState
Veraltet.

Tritt auf, wenn eine Ausnahme serialisiert wird, um ein Ausnahmestatusobjekt zu erstellen, das serialisierte Daten zu der Ausnahme enthält.

(Geerbt von Exception)

Gilt für:

Weitere Informationen