Udostępnij za pośrednictwem


ObjectDisposedException Klasa

Definicja

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
ObjectDisposedException
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 obiektu Dispose (lub IDisposableAsync metodę obiektu DisposeAsync ) 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ści CloseAsync i <xref:System.IAsyncDisposable.DisposeAsync%2A?displayProperty=nameWithType>.

  • Wywołano metody lub DisposeAsync obiektu Dispose 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 condition wartość to true.

ThrowIf(Boolean, Type)

Zgłasza wartość ObjectDisposedException , jeśli określona condition wartość to true.

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)

Dotyczy

Zobacz też