ObjectDisposedException Kelas
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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
- 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
IDisposablemetode objekDispose(atauIDisposableAsyncmetode objekDisposeAsync), 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 iniClosemenyediakan implementasi IDisposable.Dispose publik jenis metode . Hal yang sama berlaku untukCloseAsyncdan<xref:System.IAsyncDisposable.DisposeAsync*?displayProperty=nameWithType>.Anda telah memanggil metode atau
DisposeAsyncobjekDisposebeberapa 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 |
| ThrowIf(Boolean, Type) |
ObjectDisposedException Melempar jika yang ditentukan |
| 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) |