예제 #1
0
        public ThreadTask Add(ParameterizedThreadStart threadStart, object obj)
        {
            ThreadTask item = new ThreadTask(obj, threadStart);

            AddTask(item);
            return(item);
        }
예제 #2
0
        public ThreadTask Add(ThreadStart threadStart)
        {
            ThreadTask item = new ThreadTask(threadStart);

            AddTask(item);
            return(item);
        }
예제 #3
0
        protected void ExecuteTask(object item)
        {
            ThreadTask task = item as ThreadTask;

            try
            {
                task.Execute();
            }
            catch (Exception exception)
            {
                task.Exception = exception;
            }
            finally
            {
                lock (SyncRoot)
                {
                    _runTasks--;
                    if (AllTasks == 0)
                    {
                        _allTaskCompleted.Set();
                    }
                    else
                    {
                        TryBeginWaitTask();
                    }
                }
            }
        }
예제 #4
0
 protected void BeginTask(ThreadTask item)
 {
     if (UseSystemThreadPool)
     {
         BeginTaskBySystemThreadPool(item);
     }
     else
     {
         BeginTaskByPersonalThread(item);
     }
     _runTasks++;
 }
예제 #5
0
 public void AddTask(ThreadTask item)
 {
     lock (SyncRoot)
     {
         if (HasFreeThreads)
         {
             BeginTask(item);
         }
         else
         {
             _queue.Enqueue(item);
         }
         _allTaskCompleted.Reset();
     }
 }
예제 #6
0
        protected void BeginTaskByPersonalThread(ThreadTask item)
        {
            var thread = new Thread(ExecuteTask);

            thread.Start(item);
        }
예제 #7
0
 protected void BeginTaskBySystemThreadPool(ThreadTask item)
 {
     ThreadPool.QueueUserWorkItem(ExecuteTask, item);
 }