CriticalHandle.ReleaseHandle Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
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 .
Observações
O ReleaseHandle método é garantido de ser chamado apenas uma vez, desde que utilize mecanismos de sincronização adequados para garantir que apenas uma chamada ao Close método ou Dispose seja feita. O ReleaseHandle método não será chamado se a IsInvalid propriedade ou IsClosed for true. Implementa este método nas tuas CriticalHandle classes derivadas para executar qualquer código necessário para libertar o handle. Como uma das funções é CriticalHandle 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 os finalizadores normais terem sido executados para objetos que foram recolhidos ao mesmo tempo, e garante os recursos para os invocar e que não será interrompido enquanto estiver em curso. Este método será preparado como uma região de execução restrita (CER) no momento da construção da instância (juntamente com todos os métodos no seu grafo de chamadas estaticamente determinável). Embora isto previna interrupções de aborto de thread, deve ter cuidado para não introduzir caminhos de falha no seu método sobrescrito ReleaseHandle . Em particular, aplique o ReliabilityContractAttribute atributo a quaisquer métodos que chame de ReleaseHandle. Na maioria dos casos, este código deve ser:
ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)
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 o ReleaseHandle método regressar false por qualquer motivo, gera um Assistente de Depuração Gerido releaseHandleFail .