public partial class Form1 : Form { protected NLog.Logger logger = NLog.LogManager.GetLogger("ThreadUpload"); public Form1() { InitializeComponent(); } /// <summary> /// 上传 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, EventArgs e) { List<string> data = new List<string>(); for (int i = 0; i < 1000; i++) { data.Add(i.ToString()); } ToPagingProcess(data, 1000); } #region private void ThreadMethod(object obj) { Param pra = (Param)obj; try { #region 提交数据 Thread.Sleep(2000); #endregion if (pra.fileShipmentsEntityList != null) { for (int i = 0; i < pra.fileShipmentsEntityList.Count; i++) { logger.Error("时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "执行数据:" + pra.fileShipmentsEntityList[i]); } } } catch (Exception ex) { logger.ErrorException("ThreadMethod()", ex); } pra.mrEvent.Set(); lock (locker) { finishcount++; Monitor.Pulse(locker); //完成,通知等待队列,告知已完,执行下一个。 } } int _ThreadCount = 500; int finishcount = 0; object locker = new object(); List<ManualResetEvent> manualEvents = new List<ManualResetEvent>(); protected void ToPagingProcess<TEntity>(IEnumerable<TEntity> item, int pageSize) { finishcount = 0; _ThreadCount = pageSize; if (item != null && item.Count() > 0) { int SingleSendArrival = 1; for (int i = 1; i <= pageSize; i++) { var currentPageItem = item.Skip((i - 1) * SingleSendArrival).Take(SingleSendArrival); ManualResetEvent mre = new ManualResetEvent(false); manualEvents.Add(mre); Param pra = new Param(); pra.mrEvent = mre; pra.fileShipmentsEntityList = new List<string>(); foreach (var itm in currentPageItem) { pra.fileShipmentsEntityList.Add(itm as string); } ThreadPool.QueueUserWorkItem(ThreadMethod, pra); } lock (locker) { while (finishcount != _ThreadCount) { Monitor.Wait(locker);//等待 } } } //执行完毕 //RefreshHawbList(); } #endregion } public class Param { public string SubType; public ManualResetEvent mrEvent; public List<string> fileShipmentsEntityList; }