System.Threading.RegisteredWaitHandleSafe.UnregisterWaitNative C# (CSharp) Method

UnregisterWaitNative() private method

private UnregisterWaitNative ( IntPtr handle, SafeHandle waitObject ) : bool
handle System.IntPtr
waitObject System.Runtime.InteropServices.SafeHandle
return bool
        private static extern bool UnregisterWaitNative(IntPtr handle, SafeHandle waitObject);
    }

Usage Example

        internal bool Unregister(WaitHandle waitObject)
        {
            bool flag = false;

            RuntimeHelpers.PrepareConstrainedRegions();
            try
            {
            }
            finally
            {
                bool flag2 = false;
                do
                {
                    if (Interlocked.CompareExchange(ref this.m_lock, 1, 0) == 0)
                    {
                        flag2 = true;
                        try
                        {
                            if (this.ValidHandle())
                            {
                                flag = RegisteredWaitHandleSafe.UnregisterWaitNative(this.GetHandle(), (waitObject == null) ? null : waitObject.SafeWaitHandle);
                                if (flag)
                                {
                                    if (this.bReleaseNeeded)
                                    {
                                        this.m_internalWaitObject.SafeWaitHandle.DangerousRelease();
                                        this.bReleaseNeeded = false;
                                    }
                                    this.SetHandle(RegisteredWaitHandleSafe.InvalidHandle);
                                    this.m_internalWaitObject = null;
                                    GC.SuppressFinalize(this);
                                }
                            }
                        }
                        finally
                        {
                            this.m_lock = 0;
                        }
                    }
                    Thread.SpinWait(1);
                }while (!flag2);
            }
            return(flag);
        }