SafeHandle.ReleaseHandle メソッド
アセンブリ: mscorlib (mscorlib.dll 内)

Dim returnValue As Boolean returnValue = Me.ReleaseHandle
ハンドルが正常に解放された場合は true。深刻なエラーが発生した場合は false。この場合、ReleaseHandleFailed マネージ デバッグ アシスタントが生成されます。

ReleaseHandle メソッドは、IsInvalid プロパティの定義に従いハンドルが有効である場合に限り、1 回だけ呼び出されることが保証されています。SafeHandle の派生クラスでこのメソッドを実装し、ハンドルを解放するために必要なコードを実行します。SafeHandle の関数のいずれかによって、リソース リークの防止が保証されるため、ReleaseHandle の実装のコードが失敗しないようにしてください。ガベージ コレクタは、同時に収集したオブジェクトに対して通常のファイナライザが実行された後に ReleaseHandle を呼び出すため、このメソッドを確実に呼び出し、メソッドの実行中にその動作が中断されないことがリソースに対して保証されます。このメソッドは、静的に決定可能な呼び出し先のすべてのメソッドと共に、インスタンス構築時に制約された実行領域 (CER: Constrained Execution Region) として用意されます。これにより、スレッドの中止によって処理が中断されることはなくなりますが、オーバーライドされた ReleaseHandle メソッドに違反パスが取り込まれないように注意する必要があります。特に、ReleaseHandle から呼び出すメソッドには、ReliabilityContractAttribute 属性を適用します。ほとんどの場合、このコードは次のようにする必要があります。
ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)
さらに、簡単なクリーンアップでは (ファイル ハンドルで Win32 API の CloseHandle を呼び出す場合など)、単一プラットフォーム呼び出しの戻り値をチェックできます。複雑なクリーンアップでは、多数のプログラム ロジックやメソッド呼び出しを使用できますが、それらの一部が失敗する場合もあります。プログラム ロジックでは、これらの各ケースに対するフォールバック コードを必ず用意するようにしてください。
何らかの理由で ReleaseHandle が false を返す場合、ReleaseHandleFailed マネージ デバッグ アシスタントが生成されます。これは、リソースの解放が失敗したケースを検出するうえで役立ちます。


- SecurityPermission (アンマネージ コードを呼び出すために必要なアクセス許可)。 UnmanagedCode (関連する列挙体)。LinkDemand (セキュリティ アクション)。

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


SafeHandle.ReleaseHandle メソッド
アセンブリ: mscorlib (mscorlib.dll 内)

Dim returnValue As Boolean returnValue = Me.ReleaseHandle

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


- SafeHandle.ReleaseHandleのページへのリンク