ObjectDisposedException Osztály

Definíció

Az a kivétel, amely akkor fordul elő, ha egy műveletet egy megsemmisített objektumon hajtanak végre.

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
Öröklődés
ObjectDisposedException
Öröklődés
Attribútumok

Példák

Az alábbi példa egy hibát mutat be, amely a ObjectDisposedException kivételt okozza.

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

Ez a kód a következő kimenetet állítja elő:

Caught:
  Cannot access a closed Stream.

Megjegyzések

A ObjectDisposedException parancs akkor aktiválódik, ha egy olyan objektum egy tagját próbálja elérni, amely megvalósítja az interfészt vagy IDisposable az IAsyncDisposable interfészt, és az objektum el lett adva. Ezt a kivételt általában az alábbi feltételek valamelyike okozza:

  • Meghívta egy IDisposable objektum metódusát Dispose (vagy egy IDisposableAsync objektum metódusát DisposeAsync ), és egy olyan példánytagot próbál elérni, amely lekéri vagy beállítja az objektum állapotát. Az alábbi példa azt ObjectDisposedException szemlélteti, hogy a metódus meghívása után az időzítőértesítések gyakoriságának alaphelyzetbe állításakor milyen műveletet hajt végre.Timer.Dispose

    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()
    
  • Meghívta egy objektum metódusát Close , és egy olyan példánytagot próbál elérni, amely lekéri vagy beállítja az objektum állapotát. A metódus gyakran biztosítja a Close metódus nyilvános implementálását IDisposable.Dispose . Ugyanez igaz az és CloseAsynca <xref:System.IAsyncDisposable.DisposeAsync*?displayProperty=nameWithType> .

  • Egy objektumot Dispose vagy DisposeAsync metódust többször is felhívott. Ez általában nem kivétel. Attól függően azonban, hogy egy típus hogyan valósítja meg a metódust IDisposable.Dispose , vagy IAsyncDisposable.DisposeAsyncnem feltétlenül engedélyezi a metódus több hívását.

A legtöbb esetben ez a kivétel fejlesztői hibából ered. A blokkok try/catch hibáinak kezelése helyett ki kell javítania a hibát, általában az objektum ismételt megadásával.

Konstruktorok

Name Description
ObjectDisposedException(SerializationInfo, StreamingContext)
Elavult.

Inicializálja az ObjectDisposedException osztály új példányát szerializált adatokkal.

ObjectDisposedException(String, Exception)

Inicializálja az ObjectDisposedException osztály új példányát egy megadott hibaüzenettel és a kivétel okaként szolgáló belső kivételre mutató hivatkozással.

ObjectDisposedException(String, String)

Inicializálja az osztály új példányát ObjectDisposedException a megadott objektumnévvel és üzenettel.

ObjectDisposedException(String)

Inicializálja az ObjectDisposedException osztály új példányát egy sztringgel, amely tartalmazza az elvetett objektum nevét.

Tulajdonságok

Name Description
Data

Lekéri a kulcs-/érték párok gyűjteményét, amelyek további, felhasználó által definiált információkat biztosítanak a kivételről.

(Öröklődés forrása Exception)
HelpLink

Lekéri vagy beállítja a kivételhez társított súgófájlra mutató hivatkozást.

(Öröklődés forrása Exception)
HResult

Lekéri vagy beállítja a HRESULT-ot, egy kódolt numerikus értéket, amely egy adott kivételhez van hozzárendelve.

(Öröklődés forrása Exception)
InnerException

Lekéri az Exception aktuális kivételt okozó példányt.

(Öröklődés forrása Exception)
Message

Lekéri a hibát leíró üzenetet.

ObjectName

Lekéri az elvetett objektum nevét.

Source

Lekéri vagy beállítja az alkalmazás vagy a hibát okozó objektum nevét.

(Öröklődés forrása Exception)
StackTrace

Lekéri a hívásverem közvetlen kereteinek sztringképét.

(Öröklődés forrása Exception)
TargetSite

Lekéri az aktuális kivételt okozó metódust.

(Öröklődés forrása Exception)

Metódusok

Name Description
Equals(Object)

Meghatározza, hogy a megadott objektum egyenlő-e az aktuális objektummal.

(Öröklődés forrása Object)
GetBaseException()

Ha egy származtatott osztály felül van bírálva, egy Exception vagy több későbbi kivétel kiváltó okát adja vissza.

(Öröklődés forrása Exception)
GetHashCode()

Ez az alapértelmezett kivonatoló függvény.

(Öröklődés forrása Object)
GetObjectData(SerializationInfo, StreamingContext)
Elavult.

Lekéri az SerializationInfo objektumot a paraméter nevével és további kivételadatokkal.

GetType()

Lekéri az aktuális példány futtatókörnyezeti típusát.

(Öröklődés forrása Exception)
MemberwiseClone()

Az aktuális Objectpéldány sekély másolatát hozza létre.

(Öröklődés forrása Object)
ThrowIf(Boolean, Object)

Ha a megadott érték vantrue, akkor a ObjectDisposedException megadott condition értéket adja meg.

ThrowIf(Boolean, Type)

Ha a megadott érték vantrue, akkor a ObjectDisposedException megadott condition értéket adja meg.

ToString()

Létrehozza és visszaadja az aktuális kivétel sztring-ábrázolását.

(Öröklődés forrása Exception)

esemény

Name Description
SerializeObjectState
Elavult.

Akkor fordul elő, ha a kivétel szerializálva van egy kivételállapot-objektum létrehozásához, amely szerializált adatokat tartalmaz a kivételről.

(Öröklődés forrása Exception)

A következőre érvényes:

Lásd még