C# 多線程是否結束可通過線程池可以判斷


C# ManualResetEvent信號狀態判斷線程池是否結束 

這是一段重要的代碼,小豬兩個小時的研究成果,記下來備查。

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace 線程池判斷結束綜合演示
{
    class Program
    {
        public static int iCount = 0;  
        public static int MaxCount = 10;//允許線程池中運行最多10個線程
        static ManualResetEvent eventX = new ManualResetEvent(false);  //新建ManualResetEvent對象並且初始化為無信號狀態

        static void Main(string[] args)
        {
            Console.WriteLine("ManualResetEvent初始為無信號狀態 ");
            Console.WriteLine("線程池最大值為 {0} 個線程。", MaxCount);
            for (int iItem = 1; iItem <= MaxCount; iItem++)
            {
                //插入隊列元素
                Console.WriteLine("加入線程 {0}", iItem);
                ThreadPool.QueueUserWorkItem(new WaitCallback(fun1), (object)iItem);
            }
            Console.WriteLine("等待線程池完成操作。。。"); //等待事件的完成,即線程調用ManualResetEvent.Set()方法
            eventX.WaitOne(Timeout.Infinite, true); //WaitOne()方法使調用它的線程等待直到eventX.Set()方法被調用
            Console.WriteLine("線程池結束!");
            Console.ReadLine();
        }

        public static void fun1(object j)
        {
            Console.WriteLine(" {0} {1} :", Thread.CurrentThread.GetHashCode(), j.ToString());
            Thread.Sleep(1000);
            Interlocked.Increment(ref iCount);
            if (iCount == MaxCount)
            {
                Console.WriteLine();
                Console.WriteLine("設置ManualResetEvent為有信號狀態,Setting eventX ");
                eventX.Set();
            }  

        }

 

    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM