/// <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; }