Main函数里ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadProc)); 即可。(注意WaitCallback系统委托),它的功能就像第2种方法里提到的new thread。
那么RegisterWaitForSingleObj
具体的使用如下:
AutoResetEvent wait = new AutoResetEvent(false);
object state = new object();
ThreadPool.RegisterWaitForSingleObj
//5000是间隔调用的时间,也就是wait变量卡住的timeout时间(我觉得内部是这样实现的)
wait.Set(); //如果有set这句话,那么第一次执行不用等5秒,则直接执行目标函数,否则没这句话,第一次执行要等5秒的。
还有一个要注意:我平常使用的是ManualResetEvent,但在threadpool里,首先要选的是AutoResetEvent,因为AutoResetEvent能自动reset,所以下一次间隔来了,又要重新等待5秒钟,达到定时器的目的。如果是ManualResetEvent,要么一次执行不了(初始值为false),要么不间断的玩命执行。
ManualResetEvent和AutoResetEvent的另一个重要区别是前者能一次唤醒多个线程,而后者一次只能唤醒一个线程。
其实RegisterWaitForSingleObj
对了,说到这里,RegisterWaitForSingleObj
这要用到Unregister函数:
RegisteredWaitHandle rw = ThreadPool.RegisterWaitForSingleObj
rw.Unregister(wait);
嗯讨论了这么多线程的东西,干脆再说一个小点:Thread.IsBackground=true的时候,指示该线程为后台线程。后台线程将会随着主线程的退出而退出