Bagikan melalui


ObjectDisposedException Kelas

Definisi

Pengecualian yang dilemparkan ketika operasi dilakukan pada objek yang dibuang.

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
Warisan
ObjectDisposedException
Warisan
Atribut

Contoh

Contoh berikut menunjukkan kesalahan yang menyebabkan ObjectDisposedException pengecualian dilemparkan.

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

Kode ini menghasilkan output berikut:

Caught:
  Cannot access a closed Stream.

Keterangan

Dilemparkan ObjectDisposedException ketika Anda mencoba mengakses anggota objek yang mengimplementasikan IDisposable antarmuka atau IAsyncDisposable antarmuka, dan objek tersebut telah dibuang. Biasanya, pengecualian ini disebabkan oleh salah satu kondisi berikut:

  • Anda telah memanggil IDisposable metode objek Dispose (atau IDisposableAsync metode objek DisposeAsync ), dan Anda mencoba mengakses anggota instans yang mendapatkan atau mengatur status objek. Contoh berikut mengilustrasikan ObjectDisposedException yang dilemparkan saat Anda mencoba mengatur ulang frekuensi pemberitahuan timer setelah Anda memanggil Timer.Dispose metode .

    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()
    
  • Anda telah memanggil metode objek Close , dan Anda mencoba mengakses anggota instans yang mendapatkan atau mengatur status objek. Seringkali, metode ini Close menyediakan implementasi IDisposable.Dispose publik jenis metode . Hal yang sama berlaku untuk CloseAsync dan <xref:System.IAsyncDisposable.DisposeAsync*?displayProperty=nameWithType>.

  • Anda telah memanggil metode atau DisposeAsync objek Dispose beberapa kali. Biasanya, ini tidak melemparkan pengecualian. Namun, tergantung pada bagaimana jenis mengimplementasikan IDisposable.Dispose atau IAsyncDisposable.DisposeAsync, mungkin tidak mengizinkan beberapa panggilan ke metode tersebut.

Dalam kebanyakan kasus, pengecualian ini dihasilkan dari kesalahan pengembang. Alih-alih menangani kesalahan dalam try/catch blok, Anda harus memperbaiki kesalahan, biasanya dengan menginstansiasi ulang objek.

Konstruktor

Nama Deskripsi
ObjectDisposedException(SerializationInfo, StreamingContext)
Kedaluwarsa.

Menginisialisasi instans ObjectDisposedException baru kelas dengan data berseri.

ObjectDisposedException(String, Exception)

Menginisialisasi instans ObjectDisposedException baru kelas dengan pesan kesalahan tertentu dan referensi ke pengecualian dalam yang merupakan penyebab pengecualian ini.

ObjectDisposedException(String, String)

Menginisialisasi instans ObjectDisposedException baru kelas dengan nama objek dan pesan yang ditentukan.

ObjectDisposedException(String)

Menginisialisasi instans ObjectDisposedException baru kelas dengan string yang berisi nama objek yang dibuang.

Properti

Nama Deskripsi
Data

Mendapatkan kumpulan pasangan kunci/nilai yang memberikan informasi tambahan yang ditentukan pengguna tentang pengecualian.

(Diperoleh dari Exception)
HelpLink

Mendapatkan atau mengatur tautan ke file bantuan yang terkait dengan pengecualian ini.

(Diperoleh dari Exception)
HResult

Mendapatkan atau mengatur HRESULT, nilai numerik berkode yang ditetapkan ke pengecualian tertentu.

(Diperoleh dari Exception)
InnerException

Mendapatkan instans Exception yang menyebabkan pengecualian saat ini.

(Diperoleh dari Exception)
Message

Mendapatkan pesan yang menjelaskan kesalahan.

ObjectName

Mendapatkan nama objek yang dibuang.

Source

Mendapatkan atau mengatur nama aplikasi atau objek yang menyebabkan kesalahan.

(Diperoleh dari Exception)
StackTrace

Mendapatkan representasi string dari bingkai langsung pada tumpukan panggilan.

(Diperoleh dari Exception)
TargetSite

Mendapatkan metode yang melemparkan pengecualian saat ini.

(Diperoleh dari Exception)

Metode

Nama Deskripsi
Equals(Object)

Menentukan apakah objek yang ditentukan sama dengan objek saat ini.

(Diperoleh dari Object)
GetBaseException()

Ketika ditimpa di kelas turunan, mengembalikan Exception yang merupakan akar penyebab dari satu atau beberapa pengecualian berikutnya.

(Diperoleh dari Exception)
GetHashCode()

Berfungsi sebagai fungsi hash default.

(Diperoleh dari Object)
GetObjectData(SerializationInfo, StreamingContext)
Kedaluwarsa.

SerializationInfo Mengambil objek dengan nama parameter dan informasi pengecualian tambahan.

GetType()

Mendapatkan jenis runtime instans saat ini.

(Diperoleh dari Exception)
MemberwiseClone()

Membuat salinan dangkal dari Objectsaat ini.

(Diperoleh dari Object)
ThrowIf(Boolean, Object)

ObjectDisposedException Melempar jika yang ditentukan condition adalah true.

ThrowIf(Boolean, Type)

ObjectDisposedException Melempar jika yang ditentukan condition adalah true.

ToString()

Membuat dan mengembalikan representasi string dari pengecualian saat ini.

(Diperoleh dari Exception)

Acara

Nama Deskripsi
SerializeObjectState
Kedaluwarsa.

Terjadi ketika pengecualian diserialisasikan untuk membuat objek status pengecualian yang berisi data berseri tentang pengecualian.

(Diperoleh dari Exception)

Berlaku untuk

Lihat juga