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();
}

不过在项目使用中使用线程池进行压缩解压时,系统资源占用很高,影响了其他程序

posted @ 2015-10-09 13:42  馨语随风  阅读(1052)  评论(0)    收藏  举报