SafeHandle.ReleaseHandle Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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.