在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類可以確保句柄能夠在不再需要時被正確地釋放。