Método CriticalHandle.ReleaseHandle ()
Dica
The .NET API Reference documentation has a new home. Visit the .NET API Browser on docs.microsoft.com to see the new experience.
Quando substituído em uma classe derivada, executa o código necessário para liberar o identificador.
Namespace: System.Runtime.InteropServices
Assembly: mscorlib (em mscorlib.dll)
Sintaxe
protected abstract bool ReleaseHandle()
protected:
virtual bool ReleaseHandle() abstract
abstract ReleaseHandle : unit -> bool
Protected MustOverride Function ReleaseHandle As Boolean
Valor Retornado
Type: System.Boolean
true se o identificador for liberado com êxito; caso contrário, no caso de uma falha catastrófica, false. Nesse caso, ele gera um Assistente para Depuração Gerenciada de MDA releaseHandleFailed.
Comentários
O ReleaseHandle método é garantido para ser chamado apenas uma vez, desde que você empregue mecanismos de sincronização adequada para garantir que apenas uma chamada para o Close ou Dispose método é feito. O ReleaseHandle método não será chamado se o IsInvalid ou IsClosed é de propriedade true. Implementar esse método no seu CriticalHandle derivadas de classes para executar qualquer código que é necessário para liberar o identificador. Porque uma das funções de CriticalHandle é garantir a prevenção de perda de recursos, o código em sua implementação de ReleaseHandle nunca deve falhar. O coletor de lixo chama ReleaseHandle depois finalizadores normais foram executados para objetos que foram limpos ao mesmo tempo, e garante que os recursos para invocar e que ele não será interrompido enquanto ele está em andamento. Esse método será preparado como uma região de execução restrita (CER) no tempo de construção da instância (junto com todos os métodos em seu gráfico de chamada estaticamente determinável). Embora isso impede que as interrupções de anulação de thread, você ainda deve ter cuidado para não incluir todos os caminhos falhas no seu substituído ReleaseHandle método. Em particular, se aplicam a ReliabilityContractAttribute a qualquer método que você chamar a partir de atributo ReleaseHandle. Na maioria dos casos, esse código deve ser:
ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)
Além disso, para limpeza simple (por exemplo, chamar a API do Win32 CloseHandle em um identificador de arquivo) você pode verificar o valor de retorno de chamada de invocação de plataforma única. Para limpeza complexa, você pode ter muita lógica de programa e muitas chamadas de método, algumas das quais podem falhar. Certifique-se de que sua lógica de programa tem código de retorno para cada um desses casos.
Se o ReleaseHandle método false por qualquer motivo, ele gera um MDA releaseHandleFailed Assistente de depuração gerenciada.
Informações de Versão
Plataforma Universal do Windows
Disponível desde 8
.NET Framework
Disponível desde 2.0
Biblioteca de Classes Portátil
Com suporte no: plataformas portáteis do .NET
Silverlight
Disponível desde 2.0
Windows Phone Silverlight
Disponível desde 8.0
Windows Phone
Disponível desde 8.1
Confira Também
Classe CriticalHandle
Namespace System.Runtime.InteropServices
Diagnosticando erros com assistentes de depuração gerenciados
MDA releaseHandleFailed
Retornar ao início