static void OnCloseHandle(IntPtr handle) { if (handle == IntPtr.Zero) { return; } NativeHandle nativeHandle = null; // Get gc handle first IntPtr pHandle = ((uv_handle_t *)handle)->data; if (pHandle != IntPtr.Zero) { GCHandle gcHandle = GCHandle.FromIntPtr(pHandle); if (gcHandle.IsAllocated) { nativeHandle = gcHandle.Target as NativeHandle; //Console.WriteLine("gcHandle free"); gcHandle.Free(); ((uv_handle_t *)handle)->data = IntPtr.Zero; } } // Release memory Libuv.FreeMemory(handle); nativeHandle?.OnClosed(); }
private bool disposedValue = false; // 要检测冗余调用 protected virtual void Dispose(bool disposing) { if (!disposedValue) { if (disposing) { // TODO: 释放托管状态(托管对象)。 } // TODO: 释放未托管的资源(未托管的对象)并在以下内容中替代终结器。 // TODO: 将大型字段设置为 null。 Libuv.FreeMemory(_loop); disposedValue = true; } }