SafeHandle.ReleaseHandle Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
En cas de substitution dans une classe dérivée, exécute le code nécessaire pour libérer le handle.
protected:
abstract bool ReleaseHandle();
protected abstract bool ReleaseHandle ();
abstract member ReleaseHandle : unit -> bool
Protected MustOverride Function ReleaseHandle () As Boolean
Retours
true
si la libération du handle réussit ; sinon, dans le cas d’un échec catastrophique, false
. Dans ce cas, elle génère un Assistant Débogage managé releaseHandleFailed.
Exemples
L’exemple de code suivant libère le handle et fait partie d’un exemple plus grand fourni pour 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.
}
Remarques
La ReleaseHandle méthode est garantie d’être appelée une seule fois et uniquement si le handle est valide comme défini par la IsInvalid propriété . Implémentez cette méthode dans vos SafeHandle classes dérivées pour exécuter tout code requis pour libérer le handle. Étant donné que l’une des fonctions de est de SafeHandle garantir la prévention des fuites de ressources, le code dans votre implémentation de ReleaseHandle ne doit jamais échouer. Le récupérateur de mémoire appelle ReleaseHandle après l’exécution des finaliseurs normaux pour les objets qui ont été collectés en même temps. Le récupérateur de mémoire garantit que les ressources appellent cette méthode et que la méthode ne sera pas interrompue pendant qu’elle est en cours.
En outre, pour un nettoyage simple (par exemple, l’appel de l’API CloseHandle
Windows sur un handle de fichier), vous pouvez vérifier la valeur de retour de l’appel d’appel de plateforme unique. Pour le nettoyage complexe, vous pouvez avoir beaucoup de logique de programme et de nombreux appels de méthode, dont certains peuvent échouer. Vous devez vous assurer que votre logique de programme dispose d’un code de secours pour chacun de ces cas.
Si ReleaseHandle retourne false
pour une raison quelconque, il génère un Assistant Débogage managé releaseHandleFailed lors de l’exécution sur .NET Framework. Cela vous permet de détecter les cas où votre tentative de libération de ressources échoue.