.NET Compact Framework 中的线程处理
更新:2007 年 11 月
.NET Compact Framework 支持核心线程处理功能,但不支持 .NET Framework 全功能版中的以下功能:
在当前线程上访问压缩堆栈。
Win32 OVERLAPPED 结构的托管表示形式。
管理执行上下文的类。
使用信号量。
线程状态属性。
除获取句柄以外的大多数等待句柄操作。
.NET Compact Framework 支持将 ThreadStart 委托与 Thread.Start 方法一起使用,并支持将 TimerCallback 委托与 Timer 一起使用。
通过使用下列线程处理方法,可以指定超时参数:
Thread 的 Join(Int32) 方法。
线程池中的更改
在 .NET Compact Framework 1.0 版中,线程池中的默认最大线程数为 256 个线程,堆栈大小 64 KB。在 .NET Compact Framework 2.0 版及更高版本中,此限制减少为最多 25 个线程,堆栈大小 128 KB,这更接近于 .NET Framework 全功能版的功能。
如果线程池中没有线程可用,HTTP 请求将失败并引发异常。下表列出了这种情况下的主要异常。
异常 |
条件 |
---|---|
无法对用户的回调排队。 |
|
线程池中没有足够的线程完成该操作。 |
可以通过减少并发 Web 请求的数量或增加线程池中允许的最大线程数来避免线程不足。.NET Compact Framework 2.0 支持 SetMaxThreads 方法。如下表所述指定该方法的参数。
参数 |
说明 |
---|---|
workerThreads |
线程池中的辅助线程的最大数量。可以是任意值。 |
completionPortThreads |
线程池中的异步线程的最大数量。.NET Compact Framework 当前忽略此值,但该值必须设置为介于 1 和 1,000 之间。考虑到将来的兼容性,建议使用 500,因为这是 .NET Framework 全功能版的默认值。 |
对于运行 .NET Compact Framework 1.0 的设备,通过更改注册表设置可以减少线程池中允许的最大线程数。请将 CFROOT\ThreadPool 项中的 MaxThreads 设置为所需的值。请注意,.NET Compact Framework 以后的版本不使用此注册表项。