ObjectDisposedException Osztály
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
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
- Ö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
IDisposableobjektum metódusátDispose(vagy egyIDisposableAsyncobjektum metódusátDisposeAsync), é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.Disposeusing 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 aClosemetódus nyilvános implementálását IDisposable.Dispose . Ugyanez igaz az ésCloseAsynca<xref:System.IAsyncDisposable.DisposeAsync*?displayProperty=nameWithType>.Egy objektumot
DisposevagyDisposeAsyncmetó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 van |
| ThrowIf(Boolean, Type) |
Ha a megadott érték van |
| 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) |