SafeHandle.ReleaseHandle Metódus

Definíció

Ha egy származtatott osztályban felül van bírálva, végrehajtja a leíró felszabadításához szükséges kódot.

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

Válaszok

true ha a fogópont feloldása sikeresen megtörtént; egyéb esetben katasztrofális hiba falseesetén. Ebben az esetben létrehoz egy releaseHandleFailed Managed Debugging Assistant fájlt.

Példák

Az alábbi példakód kiadja a leírót, és egy nagyobb, az SafeHandle osztály számára biztosított példa része.

[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.
}

Megjegyzések

A ReleaseHandle metódus csak egyszer és csak akkor hívható meg, ha a leíró a IsInvalid tulajdonság által meghatározott módon érvényes. Ezt a metódust a származtatott osztályokban implementálhatja SafeHandle a leíró felszabadításához szükséges kód végrehajtásához. Mivel az egyik funkciója SafeHandle az erőforrásszivárgások megelőzésének biztosítása, a implementációban lévő kódnak soha nem szabad sikertelennek ReleaseHandle lennie. A szemétgyűjtő hívások ReleaseHandle a normál véglegesítők futtatása után olyan objektumok esetében, amelyek egyszerre gyűjtötték a szemetet. A szemétgyűjtő garantálja, hogy az erőforrások meghívják ezt a metódust, és hogy a metódus nem lesz megszakítva, amíg folyamatban van.

Emellett az egyszerű törléshez (például a Windows API CloseHandle fájlleírón való meghívásához) ellenőrizheti az egyetlen platformhívási hívás visszatérési értékét. Az összetett törléshez sok programlogika és számos metódushívás is előfordulhat, amelyek némelyike sikertelen lehet. Győződjön meg arról, hogy a programlogika mindegyik esetben tartalék kóddal rendelkezik.

Ha ReleaseHandle bármilyen okból false ad vissza, releaseHandleFailed Felügyelt hibakeresési segéd jön létre .NET-keretrendszeren való futtatáskor. Ez segít észlelni azokat az eseteket, amikor az erőforrások kiadására tett kísérlet meghiúsul.

A következőre érvényes:

Lásd még