Condividi tramite


SafeHandle.ReleaseHandle Metodo

Definizione

Quando sottoposto a override in una classe derivata, esegue il codice necessario per liberare l'handle.

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

Restituisce

true se l'handle viene rilasciato correttamente; in caso contrario, in caso di errore irreversibile, false. In questo caso, genera un Assistente debug gestito releaseHandleFailed .

Esempio

Nell'esempio di codice seguente viene rilasciato l'handle e fa parte di un esempio più ampio fornito per la SafeHandle classe .

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

Commenti

Il ReleaseHandle metodo viene chiamato una sola volta e solo se l'handle è valido come definito dalla IsInvalid proprietà . Implementare questo metodo nelle SafeHandle classi derivate per eseguire qualsiasi codice necessario per liberare l'handle. Poiché una delle funzioni di SafeHandle è garantire la prevenzione delle perdite di risorse, il codice nell'implementazione di ReleaseHandle non deve mai avere esito negativo. Le chiamate ReleaseHandle di Garbage Collector dopo l'esecuzione dei normali finalizzatori per gli oggetti sottoposti a Garbage Collection contemporaneamente. Il Garbage Collector garantisce alle risorse di richiamare questo metodo e che il metodo non verrà interrotto mentre è in corso.

Inoltre, per una pulizia semplice (ad esempio, chiamando l'API CloseHandle Windows in un handle di file) è possibile controllare il valore restituito per la singola chiamata platform invoke. Per la pulizia complessa, è possibile che si disponga di una grande logica di programma e molte chiamate di metodo, alcune delle quali potrebbero non riuscire. È necessario assicurarsi che la logica del programma abbia codice di fallback per ognuno di questi casi.

Se ReleaseHandle viene restituito false per qualsiasi motivo, genera un Assistente debug gestito releaseHandleFailed durante l'esecuzione in .NET Framework. Ciò consente di rilevare i casi in cui il tentativo di rilascio delle risorse ha esito negativo.

Si applica a

Vedi anche