在C#中安全地操作句柄可以通过以下几种方法:
IntPtr handle = IntPtr.Zero;
try
{
handle = GetHandle();
// 使用句柄
}
finally
{
if (handle != IntPtr.Zero)
{
ReleaseHandle(handle);
}
}
using (IntPtr handle = GetHandle())
{
// 使用句柄
}
public class SafeMyHandle : SafeHandle
{
public SafeMyHandle() : base(IntPtr.Zero, true)
{
}
protected override bool ReleaseHandle()
{
return NativeMethods.ReleaseMyHandle(handle);
}
public override bool IsInvalid
{
get { return handle == IntPtr.Zero; }
}
}
使用SafeHandle类可以确保句柄能够在不再需要时被正确地释放。