Ответ 1
Обе модели Threading
Основная причина для маркировки вашего компонента в качестве поддерживающей модели нитей "Both" - для повышения производительности, когда компонент вызывается из однопоточной квартиры (STA).
Если вы помечаете свой компонент как MTA и ваш компонент создается из STA, тогда ваш компонент будет создан в отдельной квартире MTA, а "resultant межсетевое маршалинг может ухудшить производительность, чтобы отрицать всю работу, поставленную в создание эффективного, свободно-резьбового компонента" . Тем не менее, если ваша модель потока компонентов обозначена как "Both" , то она будет создана внутри квартиры объекта STA и будет доступна напрямую.
Итак, если вы считаете, что ваш компонент может быть вызван из STA (все COM-объекты VB6 являются STA), вы можете пометить модель потоков как "Both" .
Хорошая статья в KB на OLE Threading Models.
Бесплатная версия Threading Model
Возможно, вы захотите использовать модель "Свободный" поток, если ваш компонент использует другие компоненты, отмеченные как "Свободные". Если ваш компонент был отмечен как "Both" , тогда может быть чрезмерное переключение квартиры между компонентом "Both" , работающим в STA и MTA. Как правило, попытайтесь создать компонент как можно ближе к вызывающему, т.е. В той же квартире, при правильном функционировании во всех сценариях.
Другая ситуация, которая гарантировала бы маркировку вашего компонента как "Свободного", - это если он явно блокирует (например, Thread.Sleep). Если компонент отмечен как "Both" и создан в STA, тогда компонент блокирует сообщение сообщения STA.
Другие соображения и сценарии
Если вы планируете использовать компонент в IIS, тогда есть и другие вопросы. Для IIS рекомендуемая настройка "Оба". В основном, чтобы избежать проблем с блокировкой с компонентами с резьбой в квартире, доступ к объекту COM + ObjectContext и тот факт, что "свободные" поточные компоненты используют контекст безопасности системы (если вам нужен доступ к контексту безопасности пользователя). См. Выбор модели Threading для компонентов в IIS для получения дополнительной информации о соображениях Threading IIS.
Другими вещами, которые следует учитывать, являются поддержка COM + и поведение ваших компонентов, если они запущены в COM +, и передаются и сохраняются указатели интерфейса.
Отличная статья COM Threading и Application Architecture в приложениях COM +. Он имеет фокус COM +, но также обсуждает COM. По вашему вопросу читайте раздел "Рекомендации по моделированию резьбы". Microsoft удалила исходную статью, поэтому я привязываюсь к копии.