ObjectDisposedException Sınıf

Tanım

Atılan nesnede bir işlem gerçekleştirildiğinde oluşan özel durum.

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
Devralma
ObjectDisposedException
Devralma
Öznitelikler

Örnekler

Aşağıdaki örnekte, özel durumun oluşmasına ObjectDisposedException neden olan bir hata gösterilmektedir.

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

Bu kod şu çıkışı oluşturur:

Caught:  
  Cannot access a closed Stream.  

Açıklamalar

arabirimini ObjectDisposedException veya IAsyncDisposable arabirimini uygulayan bir nesnenin üyesine IDisposable erişmeye çalıştığınızda ve bu nesne atıldığında oluşturulur. Bu özel duruma genellikle aşağıdaki koşullardan biri neden olur:

  • Bir IDisposable nesnenin Dispose yöntemini (veya nesnenin IDisposableAsync DisposeAsync yöntemini) çağırdınız ve nesnenin durumunu alan veya ayarlayan bir örnek üyesine erişmeye çalışıyorsunuz. Aşağıdaki örnek, yöntemini çağırdıktan sonra zamanlayıcı bildirimlerinin sıklığını sıfırlamaya çalıştığınızda oluşan değerini Timer.Dispose gösterirObjectDisposedException.

    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()
    
  • Bir nesnenin Close yöntemini çağırdınız ve nesnenin durumunu alan veya ayarlayan bir örnek üyesine erişmeye çalışıyorsunuz. Yöntemi genellikle yönteminin Close bir türünün genel uygulamasını IDisposable.Dispose sağlar. Aynı durum ve <xref:System.IAsyncDisposable.DisposeAsync%2A?displayProperty=nameWithType>için CloseAsync de geçerlidir.

  • Bir nesnenin Dispose veya DisposeAsync yöntemlerini birden çok kez çağırdınız. Genellikle, bu bir özel durum oluşturmaz. Ancak, bir türün veya IAsyncDisposable.DisposeAsyncuygulama IDisposable.Dispose şekline bağlı olarak, bu yönteme birden çok çağrıya izin vermeyebilir.

Çoğu durumda, bu özel durum geliştirici hatasından kaynaklanır. Hatayı bir try/catch blokta işlemek yerine, genellikle nesneyi yeniden göstererek hatayı düzeltmeniz gerekir.

Oluşturucular

ObjectDisposedException(SerializationInfo, StreamingContext)

ObjectDisposedException sınıfının yeni bir örneğini serileştirilmiş verilerle başlatır.

ObjectDisposedException(String)

Atılan nesnenin ObjectDisposedException adını içeren bir dize ile sınıfının yeni bir örneğini başlatır.

ObjectDisposedException(String, Exception)

Sınıfın ObjectDisposedException yeni bir örneğini belirtilen bir hata iletisiyle ve bu özel durumun nedeni olan iç özel duruma başvuruyla başlatır.

ObjectDisposedException(String, String)

Belirtilen nesne adı ve iletisiyle sınıfının yeni bir örneğini ObjectDisposedException başlatır.

Özellikler

Data

Özel durum hakkında kullanıcı tanımlı ek bilgiler sağlayan bir anahtar/değer çifti koleksiyonu alır.

(Devralındığı yer: Exception)
HelpLink

Bu özel durumla ilişkili yardım dosyasının bağlantısını alır veya ayarlar.

(Devralındığı yer: Exception)
HResult

Belirli bir özel duruma atanan kodlanmış sayısal bir değer olan HRESULT değerini alır veya ayarlar.

(Devralındığı yer: Exception)
InnerException

Exception Geçerli özel duruma neden olan örneği alır.

(Devralındığı yer: Exception)
Message

Hatayı açıklayan iletiyi alır.

ObjectName

Atılan nesnenin adını alır.

Source

Hataya neden olan uygulamanın veya nesnenin adını alır veya ayarlar.

(Devralındığı yer: Exception)
StackTrace

Çağrı yığınındaki anlık çerçevelerin dize gösterimini alır.

(Devralındığı yer: Exception)
TargetSite

Geçerli özel durumu oluşturan yöntemini alır.

(Devralındığı yer: Exception)

Yöntemler

Equals(Object)

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler.

(Devralındığı yer: Object)
GetBaseException()

Türetilmiş bir sınıfta geçersiz kılındığında, sonraki bir veya daha fazla özel durumun kök nedeni olan değerini döndürür Exception .

(Devralındığı yer: Exception)
GetHashCode()

Varsayılan karma işlevi işlevi görür.

(Devralındığı yer: Object)
GetObjectData(SerializationInfo, StreamingContext)

SerializationInfo Parametre adı ve ek özel durum bilgileriyle nesnesini alır.

GetObjectData(SerializationInfo, StreamingContext)

Türetilmiş bir sınıfta geçersiz kılındığında, özel durum hakkındaki bilgilerle öğesini ayarlar SerializationInfo .

(Devralındığı yer: Exception)
GetType()

Geçerli örneğin çalışma zamanı türünü alır.

(Devralındığı yer: Exception)
MemberwiseClone()

Geçerli Objectöğesinin sığ bir kopyasını oluşturur.

(Devralındığı yer: Object)
ThrowIf(Boolean, Object)

Belirtilen condition ise truebir ObjectDisposedException oluşturur.

ThrowIf(Boolean, Type)

Belirtilen condition ise truebir ObjectDisposedException oluşturur.

ToString()

Geçerli özel durumun dize gösterimini oluşturur ve döndürür.

(Devralındığı yer: Exception)

Ekinlikler

SerializeObjectState
Kullanımdan kalktı.

Bir özel durum, özel durum hakkında serileştirilmiş veriler içeren bir özel durum nesnesi oluşturmak üzere seri hale getirildiğinde gerçekleşir.

(Devralındığı yer: Exception)

Şunlara uygulanır

Ayrıca bkz.