/// <summary> /// Signal <see cref="UserUnregisterWaitHandle"/> if it has not been signaled yet and is a valid handle. /// </summary> private void SignalUserWaitHandle() { _callbackLock.VerifyIsLocked(); SafeWaitHandle handle = UserUnregisterWaitHandle; IntPtr handleValue = UserUnregisterWaitHandleValue; try { if (handleValue != IntPtr.Zero && handleValue != (IntPtr)(-1)) { Debug.Assert(handleValue == handle.DangerousGetHandle()); #if PLATFORM_WINDOWS Interop.Kernel32.SetEvent(handle); #else WaitSubsystem.SetEvent(handleValue); #endif } } finally { handle?.DangerousRelease(); _callbacksComplete?.Set(); _unregistered = true; } }
internal static bool Set(SafeWaitHandle waitHandle) { waitHandle.DangerousAddRef(); try { WaitSubsystem.SetEvent(waitHandle.DangerousGetHandle()); return(true); } finally { waitHandle.DangerousRelease(); } }
public bool Set() { SafeWaitHandle waitHandle = ValidateHandle(); try { WaitSubsystem.SetEvent(waitHandle.DangerousGetHandle()); return(true); } finally { waitHandle.DangerousRelease(); } }
private void SignalNoCallbacksRunning() { SafeWaitHandle waitHandle = _notifyWhenNoCallbacksRunning.SafeWaitHandle; waitHandle.DangerousAddRef(); try { WaitSubsystem.SetEvent(waitHandle.DangerousGetHandle()); } finally { waitHandle.DangerousRelease(); } }
private void SignalNoCallbacksRunning() { object toSignal = _notifyWhenNoCallbacksRunning; Debug.Assert(toSignal is WaitHandle || toSignal is Task <bool>); if (toSignal is WaitHandle wh) { SafeWaitHandle waitHandle = wh.SafeWaitHandle; waitHandle.DangerousAddRef(); try { WaitSubsystem.SetEvent(waitHandle.DangerousGetHandle()); } finally { waitHandle.DangerousRelease(); } } else { ((Task <bool>)toSignal).TrySetResult(true); } }
private static bool SetCore(IntPtr handle) { WaitSubsystem.SetEvent(handle); return(true); }