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ę
IDisposableobiektuDispose(lubIDisposableAsyncmetodę 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
Closei próbujesz uzyskać dostęp do elementu członkowskiego wystąpienia, który pobiera lub ustawia stan obiektu.CloseCzęsto metoda zapewnia publiczną implementację IDisposable.Dispose metody typu. To samo dotyczy wartościCloseAsynci<xref:System.IAsyncDisposable.DisposeAsync%2A?displayProperty=nameWithType>.Wywołano metody lub
DisposeAsyncobiektuDisposewiele 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) |