SafeHandle.ReleaseHandle Metode

Definisi

Ketika ditimpa di kelas turunan, jalankan kode yang diperlukan untuk membebaskan handel.

protected:
 abstract bool ReleaseHandle();
protected abstract bool ReleaseHandle ();
abstract member ReleaseHandle : unit -> bool
Protected MustOverride Function ReleaseHandle () As Boolean

Mengembalikan

true jika handel berhasil dilepaskan; jika tidak, jika terjadi kegagalan bencana, false. Dalam hal ini, ini menghasilkan Asisten Debugging Terkelola releaseHandleFailed .

Contoh

Contoh kode berikut merilis handel dan merupakan bagian dari contoh yang lebih besar yang disediakan untuk SafeHandle kelas .

[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
override protected bool ReleaseHandle()
{
    // Here, we must obey all rules for constrained execution regions.
    return NativeMethods.CloseHandle(handle);
    // If ReleaseHandle failed, it can be reported via the
    // "releaseHandleFailed" managed debugging assistant (MDA).  This
    // MDA is disabled by default, but can be enabled in a debugger
    // or during testing to diagnose handle corruption problems.
    // We do not throw an exception because most code could not recover
    // from the problem.
}

Keterangan

Metode ReleaseHandle ini dijamin hanya dipanggil sekali dan hanya jika handel valid seperti yang IsInvalid didefinisikan oleh properti . Terapkan metode ini di kelas turunan Anda SafeHandle untuk menjalankan kode apa pun yang diperlukan untuk membebaskan handel. Karena salah satu fungsinya SafeHandle adalah menjamin pencegahan kebocoran sumber daya, kode dalam implementasi ReleaseHandle Anda tidak boleh gagal. Pengumpul sampah memanggil ReleaseHandle setelah finalizer normal dijalankan untuk objek yang dikumpulkan sampah pada saat yang sama. Pengumpul sampah menjamin sumber daya untuk memanggil metode ini dan bahwa metode tidak akan terganggu saat sedang berlangsung.

Selain itu, untuk pembersihan sederhana (misalnya, memanggil Windows API CloseHandle pada handel file) Anda dapat memeriksa nilai pengembalian untuk satu panggilan pemanggilan platform. Untuk pembersihan yang kompleks, Anda mungkin memiliki banyak logika program dan banyak panggilan metode, beberapa di antaranya mungkin gagal. Anda harus memastikan bahwa logika program Anda memiliki kode fallback untuk setiap kasus tersebut.

Jika ReleaseHandle dikembalikan false karena alasan apa pun, ia menghasilkan Asisten Debugging Terkelola releaseHandleFailed saat berjalan di .NET Framework. Ini membantu Anda mendeteksi kasus di mana upaya Anda untuk merilis sumber daya gagal.

Berlaku untuk

Lihat juga