Exemplo n.º 1
0
        public void DoWork()
        {
            ThreadPool.SetMinThreads(ThreadCount, ThreadCount);
            List <ManualResetEvent> manualResetEvents = new List <ManualResetEvent>();

            foreach (var a in DicAllServerGroup)
            {
                if (Convert.ToBoolean(a.Value.TrueFalse) && a.Key.GroupName.Equals(SelectedServerGroup, StringComparison.OrdinalIgnoreCase))
                {
                    ThreadPoolStatus threadPoolStatus = new ThreadPoolStatus();
                    threadPoolStatus.signal = new ManualResetEvent(false);
                    threadPoolStatus.stop   = manualResetEvent;

                    manualResetEvents.Add(threadPoolStatus.signal);
                    MainWorker mainWorker =
                        new MainWorker(ThreadCompletedAndExecuteMethod
                                       , a.Key.Ip
                                       , a.Key.Port
                                       , UserId
                                       , Password
                                       , a.Key.Database
                                       , ConnectionTimeoutSec
                                       , CommamdTimeoutSec
                                       , Querys
                                       , ColumnDelimiter
                                       );

                    mainWorkerList.Add(mainWorker);
                    ThreadPool.QueueUserWorkItem(mainWorker.DoWork, threadPoolStatus);
                }
            }


            DateTime endTime = DateTime.Now.Add(new TimeSpan(0, 0, ThinkTimeSec));

            while (DateTime.Now < endTime)
            {
                if (CancelRequested)
                {
                    break;
                }

                Thread.Sleep(100);
            }

            if (!CancelRequested)
            {
                // 동시에 시작~ 고~
                manualResetEvent.Set();
                WaitForAll(manualResetEvents);
            }
            PoolWorkerCompleteCallbackMethodName();
        }
Exemplo n.º 2
0
        public void DoWork(object theadPoolStatus)
        {
            bool             bReturn = false;
            ThreadPoolStatus status  = theadPoolStatus as ThreadPoolStatus;

            if (status == null)
            {
                return;
            }
            Debug.WriteLine("WorkQueue Ready!");

            // 한번에 실행하려고
            status.stop.WaitOne();

            // 실행
            bReturn = QueryExecuter(Querys, CommandTimeoutSec);

            // 콜백
            CallbackMethodName(Ip, Port, Catalog, bReturn, ErrorCnt, sbResultAll);

            // 완료 시그널 다음 Thread 고~
            status.signal.Set();
        }