Exportar (0) Imprimir
Expandir todo
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

SafeHandle.ReleaseHandle (Método)

Cuando se invalida en una clase derivada, ejecuta el código necesario para liberar el identificador.

Espacio de nombres:  System.Runtime.InteropServices
Ensamblado:  mscorlib (en mscorlib.dll)

protected abstract bool ReleaseHandle()

Valor devuelto

Tipo: System.Boolean
true si se libera el identificador correctamente; de lo contrario, en caso de un grave error, false. En este caso, genera un Asistente para la depuración administrada MDA de releaseHandleFailed.

Se garantiza que sólo se va a llamar una vez al método ReleaseHandle y sólo si el identificador es válido como se define con la propiedad IsInvalid. Implemente este método en sus clases derivadas SafeHandle para ejecutar el código que sea necesario para liberar el identificador. Dado que una de las funciones de SafeHandle es garantizar la prevención de la falta de recursos, el código de la implementación de ReleaseHandle nunca debe producir un error. El recolector de elementos no utilizados llama a ReleaseHandle una vez ejecutados los finalizadores normales para los objetos no utilizados recolectados al mismo tiempo. El recolector de elementos no utilizados garantiza que los recursos invocarán este método y que no se interrumpirá mientras esté en curso. Se preparará este método como una región de ejecución restringida (CER) en el momento de la construcción de la instancia (junto con todos los métodos en su gráfico de llamadas determinable estáticamente). Aunque esto evita las interrupciones de anulación de subproceso, aún debe procurar no introducir ninguna ruta de acceso con error en el método ReleaseHandle reemplazado. En particular, aplique el atributo ReliabilityContractAttribute a los métodos a los que llame desde ReleaseHandle. En la mayoría de los casos este código debería ser:

ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)

De forma adicional, para la limpieza sencilla (por ejemplo, si se llama a la API Win32 CloseHandle en un identificador de archivos) puede comprobar el valor devuelto de la llamada de invocación de plataforma única. Para la limpieza compleja, podría tener mucha lógica de programa y muchas llamadas a método, que podrían producir un error. Debe garantizar que la lógica de programa tenga el código de reserva para cada uno de esos casos.

Si el método ReleaseHandle devuelve false por algún motivo, se genera un Asistente para la depuración administrada MDA de releaseHandleFailed. Esto le ayuda a detectar los casos en que intenta liberar las faltas de recursos.

En el ejemplo de código siguiente se libera el identificador; el ejemplo forma parte de un otro ejemplo más extenso referente a la clase SafeHandle.


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


.NET Framework

Compatible con: 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Biblioteca de clases portable

Compatible con: Biblioteca de clases portable

.NET para aplicaciones de la Tienda Windows

Compatible con: Windows 8

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft