一、创建线程池线程
通过 ThreadPool.QueueUserWorkItem(WaitCallback) 方法可以将需要异步运行的方法排入线程池的队列中。
WaitCallback(Object) 是带有一个输入参数的委托 。
未给输入参数赋值的代码示例:
ThreadPool.QueueUserWorkItem(obj =>
{
obj = "obj:";
for (int i = 0; i < 1000; i++)
{
string str = obj.ToString() + i.ToString();
this.Invoke(new Action(() => { textBox1.Text = str; }));
Thread.Sleep(1000);
}
});
有给输入参数赋值的代码示例:
object state = "state:";
ThreadPool.QueueUserWorkItem(obj =>
{
for (int i = 0; i < 1000; i++)
{
string str = obj.ToString() + i.ToString();
this.Invoke(new Action(() => { textBox1.Text = str; }));
Thread.Sleep(1000);
}
}, state);
二、注册等待线程通信事件*
通过 ThreadPool.RegisterWaitForSingleObject 方法可注册一个等待其他线程通知而运行的事件,其中,需要以下注册参数:
- WaitHandle:等待的对象,其他线程通过该对象通知运行注册的事件方法
- WaitOrTimerCallback:注册的事件方法,收到WaitHandle信号时运行
- Object:向WaitOrTimerCallback事件方法传入的参数对象
- int/long/TimeSpan:等待超时时间设置,-1为无限等待
- bool:是否只执行一次,false时触发事件方法完成后会再次等待
三、线程池线程数量
获取线程池线程数量:
- GetMaxThreads
- GetMinThreads
设置线程池线程数量:
- SetMaxThreads
- SetMinThreads