C# 线程池的使用
C#使用Thread多线程时,经常会用到多个线程都执行完后再进行下一步操作,以前的做法是设置全局变量来标识,后来看到了线程池的概念,简单的记录下来,示例代码如下:
ManualResetEvent manualResetEvent = new ManualResetEvent(false); ThreadPool.SetMaxThreads(3,2); for(int i=0;i<10;i++) { object[] param = new object[2]; param[0] = i; param[1] = manualResetEvent; object obj = param; ThreadPool.QueueUserWorkItem(new WaitCallback(Test), obj); } //等待事件的完成,即线程调用ManualResetEvent.Set()方法 //eventX.WaitOne 阻止当前线程,直到当前 WaitHandle 收到信号为止。 manualResetEvent.WaitOne(Timeout.Infinite, true);
console.WriteLine("执行完成");
void Test(object obj){
int i=Convert.ToInt32( (obj as object[])[0]);
ManualResetEvent manualResetEvent=(obj as object[])[1] as ManualResetEvent ;
console.WriteLine("执行"+i) ;
manualResetEvent.Set();
}
不过在项目使用中使用线程池进行压缩解压时,系统资源占用很高,影响了其他程序

浙公网安备 33010602011771号