/// <summary>
        /// 启动线程
        /// </summary>
        /// <param name="dataList">数据列表</param>
        /// <param name="iThreadDataItem">数据处理逻辑类</param>
        /// <param name="itemCallback">IThreadDataItem 执行完回调函数</param>
        /// <param name="callback">线程结束回调函数</param>
        /// <param name="initThreadCount">初始执行线程数量</param>
        public void Run(List <T> dataList, IThreadDataItem <T> iThreadDataItem, Action <T> itemCallback, Action <int> callback, int initThreadCount = 10)
        {
            this.callbackCount   = 0;
            this.dataList        = dataList;
            this.iThreadDataItem = iThreadDataItem;
            this.itemCallback    = itemCallback;
            this.callback        = callback;

            ThreadPool.SetMinThreads(1, 1);
            ThreadPool.SetMaxThreads(initThreadCount, initThreadCount);

            foreach (T t in dataList)
            {
                // 初始化线程帮助类,传递相关数据来执行线程逻辑
                ThreadItemDataHelper <T> threadItemDataHelper = new ThreadItemDataHelper <T>(t, this.iThreadDataItem.NewItem(), this.ThreadCallback);
                // 使用线程池
                System.Threading.WaitCallback waitCallback = new System.Threading.WaitCallback(threadItemDataHelper.Callback);
                System.Threading.ThreadPool.QueueUserWorkItem(waitCallback);
            }

            this.manualEvent.WaitOne();
            this.manualEvent.Reset();
        }
 public ThreadItemDataHelper(T t, IThreadDataItem <T> threadItem, Action <T> callback)
 {
     this.t          = t;
     this.threadItem = threadItem;
     this.callback   = callback;
 }