ObjectDisposedException Klass

Definition

Undantaget som utlöses när en åtgärd utförs på ett bortskaffat 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
Arv
ObjectDisposedException
Arv
Attribut

Exempel

I följande exempel visas ett fel som gör att undantaget ObjectDisposedException genereras.

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

Den här koden genererar följande utdata:

Caught:
  Cannot access a closed Stream.

Kommentarer

Ett ObjectDisposedException utlöses när du försöker komma åt en medlem i ett objekt som implementerar IDisposable gränssnittet eller IAsyncDisposable gränssnittet och objektet har tagits bort. Det här undantaget orsakas vanligtvis av något av följande villkor:

  • Du har anropat ett IDisposable objekts Dispose metod (eller ett IDisposableAsync objekts DisposeAsync metod) och du försöker komma åt en instansmedlem som hämtar eller anger objektets tillstånd. I följande exempel visas det ObjectDisposedException som utlöses när du försöker återställa frekvensen för timermeddelanden när du har anropat Timer.Dispose metoden.

    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()
    
  • Du har anropat ett objekts Close metod och försöker komma åt en instansmedlem som hämtar eller anger objektets tillstånd. Close Metoden tillhandahåller ofta en typs offentliga implementering av IDisposable.Dispose metoden. Detsamma gäller för CloseAsync och <xref:System.IAsyncDisposable.DisposeAsync*?displayProperty=nameWithType>.

  • Du har anropat ett objekts Dispose eller DisposeAsync metoder flera gånger. Vanligtvis utlöser detta inte ett undantag. Beroende på hur en typ implementerar IDisposable.Dispose eller IAsyncDisposable.DisposeAsync, kan det dock inte tillåta flera anrop till den metoden.

I de flesta fall beror det här undantaget på utvecklarfel. I stället för att hantera felet i ett try/catch block bör du korrigera felet, vanligtvis genom att återställa objektet.

Konstruktorer

Name Description
ObjectDisposedException(SerializationInfo, StreamingContext)

Initierar en ny instans av ObjectDisposedException klassen med serialiserade data.

ObjectDisposedException(String, Exception)

Initierar en ny instans av ObjectDisposedException klassen med ett angivet felmeddelande och en referens till det inre undantaget som är orsaken till det här undantaget.

ObjectDisposedException(String, String)

Initierar en ny instans av ObjectDisposedException klassen med det angivna objektnamnet och meddelandet.

ObjectDisposedException(String)

Initierar en ny instans av ObjectDisposedException klassen med en sträng som innehåller namnet på det borttagna objektet.

Egenskaper

Name Description
Data

Hämtar en samling nyckel/värde-par som ger ytterligare användardefinierad information om undantaget.

(Ärvd från Exception)
HelpLink

Hämtar eller anger en länk till hjälpfilen som är associerad med det här undantaget.

(Ärvd från Exception)
HResult

Hämtar eller anger HRESULT, ett kodat numeriskt värde som har tilldelats ett specifikt undantag.

(Ärvd från Exception)
InnerException

Hämtar den Exception instans som orsakade det aktuella undantaget.

(Ärvd från Exception)
Message

Hämtar meddelandet som beskriver felet.

ObjectName

Hämtar namnet på det borttagna objektet.

Source

Hämtar eller anger namnet på programmet eller objektet som orsakar felet.

(Ärvd från Exception)
StackTrace

Hämtar en strängrepresentation av de omedelbara ramarna i anropsstacken.

(Ärvd från Exception)
TargetSite

Hämtar den metod som utlöser det aktuella undantaget.

(Ärvd från Exception)

Metoder

Name Description
Equals(Object)

Avgör om det angivna objektet är lika med det aktuella objektet.

(Ärvd från Object)
GetBaseException()

När den åsidosätts i en härledd klass returnerar den Exception som är rotorsaken till ett eller flera efterföljande undantag.

(Ärvd från Exception)
GetHashCode()

Fungerar som standard-hash-funktion.

(Ärvd från Object)
GetObjectData(SerializationInfo, StreamingContext)

Hämtar SerializationInfo objektet med parameternamnet och ytterligare undantagsinformation.

GetType()

Hämtar körningstypen för den aktuella instansen.

(Ärvd från Exception)
MemberwiseClone()

Skapar en ytlig kopia av den aktuella Object.

(Ärvd från Object)
ToString()

Skapar och returnerar en strängrepresentation av det aktuella undantaget.

(Ärvd från Exception)

Händelser

Name Description
SerializeObjectState

Inträffar när ett undantag serialiseras för att skapa ett undantagstillståndsobjekt som innehåller serialiserade data om undantaget.

(Ärvd från Exception)

Gäller för

Se även