private static SafeWaitHandle NewHandle(WaitableObject waitableObject) { var safeWaitHandle = new SafeWaitHandle(); IntPtr handle = IntPtr.Zero; try { handle = HandleManager.NewHandle(waitableObject); } finally { if (handle == IntPtr.Zero) { waitableObject.OnDeleteHandle(); } } Marshal.InitHandle(safeWaitHandle, handle); return(safeWaitHandle); }