阅读本文前,先阅读:https://www.cnblogs.com/zetee/p/3487084.html
该文中构建多线程任务的思路,与delphi下构建多任务线程池的方式类似,实现繁多的任务用一定数量的线程进行处理。对并发线程的控制,是善用多线程的技巧之一,线程并不是越多越好。
本文另外的一个目的:让读者在winform下使用该对象。废话不说,上代码。
(1)队列改造
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Windows.Forms; namespace MTHdQueue { public class DownLoadFile { public string FileName { get; set; } } public class QueueThreadBase { #region 变量&属性 /// 待处理结果 private class PendingResult { /// 待处理值 public DownLoadFile PendingValue { get; set; } /// 是否有值 public bool IsHad { get; set; } } /// 线程数 public int ThreadCount { get { return this.m_ThreadCount; } set { this.m_ThreadCount = value; } } private int m_ThreadCount = 5; /// 取消=True public bool Cancel { get; set; } /// 线程列表 List<Thread> m_ThreadList; /// 完成队列个数 private volatile int m_CompletedCount = 0; /// 队列总数 private int m_QueueCount = 0; /// 全部完成锁 private object m_AllCompletedLock = new object(); /// 完成的线程数 private int m_CompetedCount = 0; /// 队列锁 private object m_PendingQueueLock = new object(); private Queue<DownLoadFile> m_InnerQueue; //--内部队列.. //public DownLoadFile Peek() //{ // return m_InnerQueue.Dequeue(); //} //public void AddQueue(DownLoadFile ff) //{ // try // {