static void Main(string[] args) { for (int i = 0; i < 20; i++) { if (i == 10) { Thread.Sleep(10000); } OrderedThread orderedThread = new OrderedThread((o) => { Console.WriteLine("第一轮:当前的线程序号" + o); Thread.Sleep(1000); Console.WriteLine(DateTime.Now.ToString()); }); orderedThread.Start(); } Console.WriteLine("第一轮全部开始了..."); for (int i = 0; i < 20; i++) { OrderedThread orderedThread = new OrderedThread((o) => { Console.WriteLine("第二轮:当前的线程序号" + o); Thread.Sleep(1000); Console.WriteLine(DateTime.Now.ToString()); }); orderedThread.Start(); } Console.WriteLine("第二轮全部开始了..."); Console.ReadKey(); }
/// <summary> /// 开始执行线程 /// </summary> public void Start(bool isBackgroundThread = true) { //添加到就绪集合中 inner_readyThreadList.AddOrUpdate(_inner_orderedID++, this, (key, vlaue) => { return(this); }); Thread th = new Thread(() => { bool isEnter = Monitor.TryEnter(_objLock); if (isEnter) { //Console.WriteLine("新开一个线程--------------------------"); //如果就绪队列中有要执行的线程 while (inner_readyThreadList.Count() > 0) { //找到起始的最小值 int minIndex = inner_readyThreadList.Keys.Min(); //绪队列中线程执行 inner_readyThreadList[minIndex]._inner_action.Invoke(minIndex); //移除执行完成的 OrderedThread orderedThreadTmp = null; inner_readyThreadList.TryRemove(minIndex, out orderedThreadTmp); } Monitor.Exit(_objLock); } }); th.SetApartmentState(ApartmentState.STA); th.IsBackground = isBackgroundThread; th.Start(); }