コード例 #1
0
ファイル: WaitHandleExtensions.cs プロジェクト: coder5110/wpf
        public static bool WaitAll(this WaitHandle waitHandle, WaitHandle[] waitHandles, CancellationToken cancelToken)
        {
            bool ret = true;

            WaitHandle[] events = new WaitHandle[waitHandles.Length + 1];
            Array.Copy(waitHandles, events, waitHandles.Length);
            events[waitHandles.Length] = cancelToken.WaitHandle;

            while (events.Length > 1)
            {
                WaitHandle firedEvent = events[WaitHandle.WaitAny(events)];
                if (firedEvent != cancelToken.WaitHandle)
                {
                    events = events.Where(e => e != firedEvent).ToArray();
                }
                else
                {
                    ret = false;
                    break;
                }
            }

            return(ret);
        }