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

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

適切な同期機構を使用して、Close メソッドまたは Dispose メソッドの呼び出しが 1 度だけ行われるようにしている場合、ReleaseHandle メソッドは必ず 1 度だけ呼び出されます。IsInvalid プロパティまたは IsClosed プロパティが true である場合、ReleaseHandle メソッドは呼び出されません。CriticalHandle の派生クラスでこのメソッドを実装し、ハンドルを解放するために必要なコードを実行します。CriticalHandle の機能の 1 つはリソースのリークを防ぐことであるため、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 によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


- CriticalHandle.ReleaseHandle メソッドのページへのリンク