线程池是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。每个进程只有一个线程池对象。
下面说一下线程池中的异常,在线程池中未处理的异常将终止进程。以下为此规则的三种例外情况:
(1)由于调用了Abort,线程池线程中将引发ThreadAbortException异常(在对Abort方法进行调用时引发的异常)。
(2)由于正在卸载应用程序域,线程池线程中将引发AppDomainUnloadedException异常(在尝试访问已卸载的应用程序域时引发的异常)。
(3)公共语言运行库或宿主进程将终止线程。
如果公共语言运行库所创建的线程中未处理这些异常中的任何一个,则异常将终止线程,但公共语言运行库不允许该异常继续下去。
如果在主线程或从非托管代码进入运行库的线程中未处理这些异常,则它们将正常继续,并导致应用程序终止。
注意:在 .NET Framework 1.0 和 1.1 版中,公共语言运行库将捕获线程池中的未处理异常,而不出现任何提示。这可能会破坏应用程序状态,并最终导致应用程序挂起,将很难进行调试。
使用线程池的方式主要有4种,下面分别对其进行介绍。
1.ThreadPool类的QueueUserWorkItem方法
在使用线程池时,可以从托管代码中调用ThreadPool类的QueueUserWorkItem方法,或从非托管代码中调用CorQueueUserWorkItem方法,并用线程池线程要执行的回调方法WaitCallback执行线程池。
QueueUserWorkItem方法将方法排入队列以便执行(并指定包含该方法所用数据的对象,用state参数来实现)。此方法在有线程池线程变得可用时执行。该方法有两个语法形式,其语法如下:
public static bool QueueUserWorkItem(WaitCallback callBack) public static bool QueueUserWorkItem(WaitCallback callBack,Object state)