Пример #1
0
        public void Start(IntPtr ioCompletionPort, IOCompletionCallback _callback)
        {
            while (true)
            {
                Thread.Yield();
                bool succeeded = Native32.GetQueuedCompletionStatus(ioCompletionPort, out uint num_bytes, out IntPtr completionKey, out NativeOverlapped * nativeOverlapped, uint.MaxValue);

                if (nativeOverlapped != null)
                {
                    int errorCode = succeeded ? 0 : Marshal.GetLastWin32Error();
                    _callback((uint)errorCode, num_bytes, nativeOverlapped);
                }
                else
                {
                    break;
                }
            }
        }
Пример #2
0
        /// <inheritdoc/>
        public override bool TryComplete()
        {
            if (!useIoCompletionPort)
            {
                return(true);
            }

            bool succeeded = Native32.GetQueuedCompletionStatus(ioCompletionPort, out uint num_bytes, out IntPtr completionKey, out NativeOverlapped * nativeOverlapped, 0);

            if (nativeOverlapped != null)
            {
                int errorCode = succeeded ? 0 : Marshal.GetLastWin32Error();
                _callback((uint)errorCode, num_bytes, nativeOverlapped);
                return(true);
            }
            else
            {
                return(false);
            }
        }