Работа с потоками в платформе .NET Compact Framework
Обновлен: Ноябрь 2007
.NET Compact Framework поддерживает базовую работу с потоками, но не поддерживает следующие возможности полной версии .NET Framework:
Доступ к сжатому стеку в текущем потоке.
Управляемое представление структуры Win32 OVERLAPPED.
Классы, которые управляют контекстом выполнения.
Использование семафоров.
Атрибуты состояния потока.
Большинство операций с дескрипторами, кроме получения дескрипторов.
.NET Compact Framework поддерживает использование делегата ThreadStart с методом Thread.Start и поддерживает использование TimerCallback с Timer.
Можно указать параметры тайм-аута при помощи использования потоковых методов:
Метод WaitOne(Int32, Boolean) класса WaitHandle.
Метод Join(Int32) класса Thread.
Изменения в пулах потоков
В .NET Compact Framework, версия 1.0, максимальное количество потоков по умолчанию в пуле равно 256 потокам с размером стека 64 КБ. В .NET Compact Framework, версия 2.0 и более поздних версиях, этот предел был уменьшен до 25 потоков с размером стека 128 КБ, что больше соответствовало возможностям полной версии .NET Framework.
Запрос HTTP окончится ошибкой и вызовет исключение, если в пуле нет доступных потоков. Основные исключения представлены в следующей таблице.
Исключение |
Условие |
---|---|
Невозможно поместить в очередь запрос пользователя. |
|
Недостаточно потоков в пуле для выполнения операции. |
Можно избежать завершения потоков, уменьшив количество одновременных веб-запросов, или увеличив максимально допустимое количество потоков в пуле. .NET Compact Framework 2.0 поддерживает метод SetMaxThreads. Укажите параметры так, как описано в следующей таблице.
Параметр |
Описание |
---|---|
workerThreads |
Максимальное количество рабочих потоков в пуле потоков. Это может быть любое значение. |
completionPortThreads |
Максимальное количество асинхронных потоков в пуле потоков. .NET Compact Framework в текущий момент игнорирует это значение, но его следует установить между 1 и 1,000. Для будущих применений, рекомендуется установить 500, так как это значение по умолчанию для полной версии .NET Framework. |
Для устройств, выполняющих .NET Compact Framework 1.0., можно уменьшить максимальное количество допустимых потоков в пуле, изменив настройки реестра. Установите параметр MaxThreads в ключе CFROOT\ThreadPool равным желаемому значению. Заметьте, что этот ключ реестра не используется более поздними версиями .NET Compact Framework.