SafeHandle.ReleaseHandle Método

Definição

Quando sobrescrito numa classe derivada, executa o código necessário para libertar o handle.

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

Devoluções

true se a pega for libertada com sucesso; caso contrário, em caso de falha catastrófica, false. Neste caso, gera um Assistente de Depuração Gerido releaseHandleFail .

Exemplos

O exemplo de código seguinte liberta o handle e faz parte de um exemplo maior fornecido para a 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.
}

Observações

O ReleaseHandle método é garantido de ser chamado apenas uma vez e somente se o handle for válido conforme definido pela IsInvalid propriedade. Implementa este método nas tuas SafeHandle classes derivadas para executar qualquer código necessário para libertar o handle. Como uma das funções é SafeHandle garantir a prevenção de fugas de recursos, o código na sua implementação ReleaseHandle nunca deve falhar. O coletor de lixo chama ReleaseHandle depois de terem sido executados finalizadores normais para objetos que foram recolhidos ao mesmo tempo. O coletor de lixo garante os recursos para invocar este método e que este não será interrompido enquanto estiver em curso.

Além disso, para uma limpeza simples (por exemplo, chamar a API Windows CloseHandle num handle de ficheiro) pode verificar o valor de retorno para a chamada de invocação de plataforma única. Para limpeza complexa, podes ter muita lógica de programa e muitas chamadas de métodos, algumas das quais podem falhar. Deves garantir que a lógica do teu programa tem código de reserva para cada um desses casos.

Se ReleaseHandle devolver false por qualquer motivo, gera um Assistente de Depuração Gerido releaseHandleFailed quando executado no .NET Framework. Isto ajuda-te a detetar casos em que a tua tentativa de libertar recursos falha.

Aplica-se a

Ver também