ObjectDisposedException Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Wyjątek zgłaszany podczas wykonywania operacji na usuniętym obiekcie.
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
- Dziedziczenie
- Dziedziczenie
- Atrybuty
Przykłady
W poniższym przykładzie pokazano błąd, który powoduje zgłoszenie wyjątku ObjectDisposedException
.
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
Ten kod spowoduje wygenerowanie następujących danych wyjściowych:
Caught:
Cannot access a closed Stream.
Uwagi
Element ObjectDisposedException jest zgłaszany podczas próby uzyskania dostępu do elementu członkowskiego obiektu, który implementuje IDisposable interfejs lub IAsyncDisposable interfejs, i ten obiekt został usunięty. Zazwyczaj ten wyjątek jest spowodowany przez jeden z następujących warunków:
Wywołaliśmy metodę
IDisposable
obiektuDispose
(lubIDisposableAsync
metodę obiektuDisposeAsync
) i próbujesz uzyskać dostęp do elementu członkowskiego wystąpienia, który pobiera lub ustawia stan obiektu. Poniższy przykład ilustruje ObjectDisposedException , który jest zgłaszany podczas próby zresetowania częstotliwości powiadomień czasomierza po wywołaniu Timer.Dispose metody .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()
Wywołaliśmy metodę obiektu
Close
i próbujesz uzyskać dostęp do elementu członkowskiego wystąpienia, który pobiera lub ustawia stan obiektu.Close
Często metoda zapewnia publiczną implementację IDisposable.Dispose metody typu. To samo dotyczy wartościCloseAsync
i<xref:System.IAsyncDisposable.DisposeAsync%2A?displayProperty=nameWithType>
.Wywołano metody lub
DisposeAsync
obiektuDispose
wiele razy. Zazwyczaj nie zgłasza to wyjątku. Jednak w zależności od sposobu implementacji IDisposable.Dispose typu lub IAsyncDisposable.DisposeAsync, może nie zezwalać na wiele wywołań do tej metody.
W większości przypadków ten wyjątek wynika z błędu dewelopera. Zamiast obsługiwać błąd w try
/catch
bloku, należy poprawić błąd, zazwyczaj przez ponowne inicjowanie obiektu.
Konstruktory
ObjectDisposedException(SerializationInfo, StreamingContext) |
Inicjuje nowe wystąpienie klasy ObjectDisposedException z zserializowanymi danymi. |
ObjectDisposedException(String) |
Inicjuje ObjectDisposedException nowe wystąpienie klasy z ciągiem zawierającym nazwę usuniętego obiektu. |
ObjectDisposedException(String, Exception) |
Inicjuje nowe wystąpienie ObjectDisposedException klasy z określonym komunikatem o błędzie i odwołaniem do wyjątku wewnętrznego, który jest przyczyną tego wyjątku. |
ObjectDisposedException(String, String) |
Inicjuje ObjectDisposedException nowe wystąpienie klasy z określoną nazwą obiektu i komunikatem. |
Właściwości
Data |
Pobiera kolekcję par klucz/wartość, które zapewniają dodatkowe informacje zdefiniowane przez użytkownika dotyczące wyjątku. (Odziedziczone po Exception) |
HelpLink |
Pobiera lub ustawia link do pliku pomocy skojarzonego z tym wyjątkiem. (Odziedziczone po Exception) |
HResult |
Pobiera lub ustawia HRESULT, zakodowaną wartość liczbową przypisaną do określonego wyjątku. (Odziedziczone po Exception) |
InnerException |
Exception Pobiera wystąpienie, które spowodowało bieżący wyjątek. (Odziedziczone po Exception) |
Message |
Pobiera komunikat opisujący błąd. |
ObjectName |
Pobiera nazwę usuniętego obiektu. |
Source |
Pobiera lub ustawia nazwę aplikacji lub obiektu, który powoduje błąd. (Odziedziczone po Exception) |
StackTrace |
Pobiera reprezentację ciągu natychmiastowych ramek w stosie wywołań. (Odziedziczone po Exception) |
TargetSite |
Pobiera metodę, która zgłasza bieżący wyjątek. (Odziedziczone po Exception) |
Metody
Equals(Object) |
Określa, czy dany obiekt jest taki sam, jak bieżący obiekt. (Odziedziczone po Object) |
GetBaseException() |
Po przesłonięciu w klasie pochodnej funkcja zwraca Exception główną przyczynę co najmniej jednego kolejnego wyjątku. (Odziedziczone po Exception) |
GetHashCode() |
Służy jako domyślna funkcja skrótu. (Odziedziczone po Object) |
GetObjectData(SerializationInfo, StreamingContext) |
SerializationInfo Pobiera obiekt z nazwą parametru i dodatkowymi informacjami o wyjątku. |
GetObjectData(SerializationInfo, StreamingContext) |
Po zastąpieniu w klasie pochodnej ustawia SerializationInfo element z informacjami o wyjątku. (Odziedziczone po Exception) |
GetType() |
Pobiera typ środowiska uruchomieniowego bieżącego wystąpienia. (Odziedziczone po Exception) |
MemberwiseClone() |
Tworzy płytkią kopię bieżącego Objectelementu . (Odziedziczone po Object) |
ThrowIf(Boolean, Object) |
Zgłasza wartość ObjectDisposedException , jeśli określona |
ThrowIf(Boolean, Type) |
Zgłasza wartość ObjectDisposedException , jeśli określona |
ToString() |
Tworzy i zwraca reprezentację ciągu bieżącego wyjątku. (Odziedziczone po Exception) |
Zdarzenia
SerializeObjectState |
Nieaktualne.
Występuje, gdy wyjątek jest serializowany w celu utworzenia obiektu stanu wyjątku zawierającego serializowane dane o wyjątku. (Odziedziczone po Exception) |