ObjectDisposedException Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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
- 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 einesIDisposableAsync
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 dieClose
Methode die öffentliche Implementierung der IDisposable.Dispose Methode eines Typs bereit. Das gleiche gilt fürCloseAsync
und<xref:System.IAsyncDisposable.DisposeAsync%2A?displayProperty=nameWithType>
.Sie haben die Methoden oder
DisposeAsync
Methoden eines ObjektsDispose
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 |
ThrowIf(Boolean, Type) |
Löst ein ObjectDisposedException , wenn der angegebene |
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) |