SafeHandle - это абстрактный класс. Он хочет, чтобы вы предоставили объект конкретного производного класса SafeHandle, который может освободить дескриптор. К сожалению, вы забыли упомянуть, как вы получили этот IntPtr, чтобы мы не знали, как он должен быть выпущен.
Я сделаю предположение и предположим, что это курсор GDI, тот, который вы получаете от функции CreateCursor() winapi. Для этого необходимо вызвать DestroyCursor(), чтобы освободить дескриптор. Такой класс может выглядеть следующим образом:
class SafeCursorHandle : Microsoft.Win32.SafeHandles.SafeHandleZeroOrMinusOneIsInvalid {
public SafeCursorHandle(IntPtr handle) : base(true) {
base.SetHandle(handle);
}
protected override bool ReleaseHandle() {
if (!this.IsInvalid) {
if (!DestroyCursor(this.handle))
throw new System.ComponentModel.Win32Exception();
this.handle = IntPtr.Zero;
}
return true;
}
[System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)]
private static extern bool DestroyCursor(IntPtr handle);
}
Щипните ReleaseHandle() замещают по мере необходимости, чтобы освободить ручку в вашем случае.