Sdílet prostřednictvím


ObjectDisposedException Třída

Definice

Výjimka, která je vyvolán při operaci je provedena na odstraněný objekt.

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
Dědičnost
ObjectDisposedException
Dědičnost
Atributy

Příklady

Následující příklad ukazuje chybu, která způsobí ObjectDisposedException vyvolání výjimky.

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

Výsledkem tohoto kódu je následující výstup:

Caught:  
  Cannot access a closed Stream.  

Poznámky

Vyvolá ObjectDisposedException se při pokusu o přístup k členu objektu, který implementuje IDisposable rozhraní nebo IAsyncDisposable rozhraní, a tento objekt byl odstraněn. Tato výjimka je obvykle způsobena jednou z následujících podmínek:

  • Volali jste metodu objektu IDisposableDispose (nebo metodu objektu IDisposableAsyncDisposeAsync ) a pokoušíte se získat přístup k členu instance, který získá nebo nastaví stav objektu. Následující příklad ukazuje ObjectDisposedException , že je vyvolána při pokusu o resetování frekvence oznámení časovače po volání 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()
    
  • Volali jste metodu objektu Close a pokoušíte se získat přístup k členu instance, který získá nebo nastaví stav objektu. Close Metoda často poskytuje veřejnou implementaci IDisposable.Dispose metody typu . Totéž platí pro CloseAsync a <xref:System.IAsyncDisposable.DisposeAsync%2A?displayProperty=nameWithType>.

  • Objekty nebo DisposeAsync metody jste volali Dispose několikrát. Obvykle to nevyvolá výjimku. V závislosti na tom, jak typ implementuje IDisposable.Dispose nebo IAsyncDisposable.DisposeAsync, však nemusí povolit více volání této metody.

Ve většině případů je tato výjimka výsledkem chyby vývojáře. Místo zpracování chyby v try/catch bloku byste měli chybu opravit, obvykle opětovným nastavením objektu.

Konstruktory

ObjectDisposedException(SerializationInfo, StreamingContext)

Inicializuje novou instanci třídy ObjectDisposedException se serializovanými daty.

ObjectDisposedException(String)

Inicializuje novou instanci ObjectDisposedException třídy s řetězcem obsahujícím název odstraněného objektu.

ObjectDisposedException(String, Exception)

Inicializuje novou instanci ObjectDisposedException třídy se zadanou chybovou zprávou a odkazem na vnitřní výjimku, která je příčinou této výjimky.

ObjectDisposedException(String, String)

Inicializuje novou instanci ObjectDisposedException třídy se zadaným názvem objektu a zprávou.

Vlastnosti

Data

Získá kolekci párů klíč/hodnota, které poskytují další uživatelem definované informace o výjimce.

(Zděděno od Exception)
HelpLink

Získá nebo nastaví odkaz na soubor nápovědy přidružený k této výjimce.

(Zděděno od Exception)
HResult

Získá nebo nastaví HRESULT, kódovaná číselná hodnota, která je přiřazena ke konkrétní výjimce.

(Zděděno od Exception)
InnerException

Exception Získá instanci, která způsobila aktuální výjimku.

(Zděděno od Exception)
Message

Získá zprávu, která popisuje chybu.

ObjectName

Získá název odstraněného objektu.

Source

Získá nebo nastaví název aplikace nebo objektu, který způsobuje chybu.

(Zděděno od Exception)
StackTrace

Získá řetězcovou reprezentaci okamžitých rámců v zásobníku volání.

(Zděděno od Exception)
TargetSite

Získá metodu, která vyvolá aktuální výjimku.

(Zděděno od Exception)

Metody

Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.

(Zděděno od Object)
GetBaseException()

Při přepsání v odvozené třídě vrátí hodnotu Exception , která je původní příčinou jedné nebo více následných výjimek.

(Zděděno od Exception)
GetHashCode()

Slouží jako výchozí hashovací funkce.

(Zděděno od Object)
GetObjectData(SerializationInfo, StreamingContext)

Načte SerializationInfo objekt s názvem parametru a dalšími informacemi o výjimce.

GetObjectData(SerializationInfo, StreamingContext)

Při přepsání v odvozené třídě nastaví s SerializationInfo informacemi o výjimce.

(Zděděno od Exception)
GetType()

Získá typ modulu runtime aktuální instance.

(Zděděno od Exception)
MemberwiseClone()

Vytvoří mělkou kopii aktuálního Objectsouboru .

(Zděděno od Object)
ThrowIf(Boolean, Object)

Vyvolá , ObjectDisposedException pokud je truezadaný condition parametr .

ThrowIf(Boolean, Type)

Vyvolá , ObjectDisposedException pokud je truezadaný condition parametr .

ToString()

Vytvoří a vrátí řetězcovou reprezentaci aktuální výjimky.

(Zděděno od Exception)

Událost

SerializeObjectState
Zastaralé.

Nastane, když je výjimka serializována k vytvoření objektu stavu výjimky, který obsahuje serializovaná data o výjimce.

(Zděděno od Exception)

Platí pro

Viz také