1. 应用程序中的线程把大部分的时间花费在等待状态,等待某个事件发生,然后才能给予响应,这种情况下需要使用ThreadPool。
2. ThreadPool可以作为一个线程的容器,ThreadPool类也是一个静态类,你不能也不必要生成它的对象,而且一旦使用该方法在线程池中添加了一个项目,那么该项目将是没有办法取消的。在这里你无需自己建立线程,只需把你要做的工作写成函数,然后作为参数传递给ThreadPool.QueueUserWorkItem()方法就行了,传递的方法就是依靠WaitCallback代理对象,而线程的建立、管理、运行等等工作都是由系统自动完成的,你无须考虑那些复杂的细节问题。
3. ThreadPool.QueueUserWorkItem(WaitCallback,Object )方法一个重载可以通过传递一个object对象给线程,这样我们在使用的时候就可以将一些重要信息封装后传递给线程。值得注意的是,传递给WaitCallback的参数的方法必须有一个Object的参数,不然会提示:“ThreadRun”的重载均与委托“System.Threading.WaitCallback”不匹配。代码如下:
static void Main(string[] args)
{
//定义一个计数器
Program p = new Program();
WaitCallback wc = new WaitCallback(p.ThreadRun);
ThreadPool.QueueUserWorkItem(wc);
}
//定义一下线程执行的方法
public void ThreadRun(Object o)
{
//具体处理
}
补充一点:Interlocked.Increment(ref int)函数类似于将传入的int变量放在lock关键字范围内。代码如下:
lock (this)
{
//计数器
count++;
}
类似于代码:Interlocked.Increment(ref count),还有一个递减的方法Interlocked.Decrement(ref int)