Condividi tramite


SafeHandle.ReleaseHandle Metodo

Definizione

Quando ne viene eseguito l'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, se si verifica un errore irreversibile, false. In questo caso, genera un assistente al debug gestito releaseHandleFailed.

Esempio

L'esempio di codice seguente rilascia l'handle e fa parte di un esempio più grande 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 IsInvalid è valido come definito dalla proprietà. Implementare questo metodo nelle SafeHandle classi derivate per eseguire qualsiasi codice necessario per liberare l'handle. Poiché una delle funzioni di è quella di garantire la prevenzione delle perdite di risorse, il codice nell'implementazione di SafeHandleReleaseHandle non deve mai avere esito negativo. Le chiamate ReleaseHandle di Garbage Collector dopo l'esecuzione dei normali finalizzatori per gli oggetti che sono stati raccolti contemporaneamente. Garbage Collector garantisce alle risorse di richiamare questo metodo e che il metodo non verrà interrotto mentre è in corso.

Inoltre, per la pulizia semplice (ad esempio, chiamata all'API CloseHandle Windows in un handle di file) è possibile controllare il valore restituito per la singola chiamata di richiamare piattaforma. Per la pulizia complessa, potrebbe essere disponibile una 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 restituisce false per qualsiasi motivo, genera un Assistente debug gestito di 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