Подтвердить что ты не робот

Апартаменты с одной резьбой и многоканальные апартаменты

Возможный дубликат:
Не могли бы вы объяснить STA и MTA?

Все потоки ThreadPool находятся в многопоточная квартира.

- согласно MSDN

Что это значит? Я действительно беспокоюсь о том, какая разница между моделью с несколькими вариантами однополюсной квартиры. Или что означает модель квартиры? Я прочитал MSDN на нем, и для меня это не имеет смысла. Я думаю, у меня может быть идея, но я думал, что кто-то здесь может объяснить это на простом английском языке.

Спасибо, Энтони D

Обновление 1

Найдено Не могли бы вы объяснить STA и MTA?

Кто-нибудь может быть более описательным?

Обновление 2

Я также ищу ответ о том, как это относится к пулу потоков и что мне нужно следить за этим.

4b9b3361

Ответ 1

STA (однопоточная квартира) и MTA (многопоточная квартира) относятся к COM. Компоненты COM могут быть спроектированы для доступа одним потоком, и в этом случае они размещаются в STA, или они могут быть сделаны внутренней нитью безопасно и размещен в MTA. Процесс может иметь только один MTA, но многие STA. Если вы собираетесь потреблять COM-компоненты, все, что вам действительно нужно знать, это то, что вам нужно сопоставить квартиру с компонентом или неприятные вещи.

Ответ 2

На самом деле STA и MTA оказывают влияние на код .NET. Смотрите запись в блоге Криса Брамме, чтобы узнать больше подробностей, чем вам, возможно, нужно:

https://devblogs.microsoft.com/cbrumme/apartments-and-pumping-in-the-clr/

Очень важно понимать, как STA перекачивает сообщения в .NET. Это имеет последствия.

Ответ 3

Если ваш COM-объект должен поверить, что он находится в однопоточной среде, используйте STA. Вам гарантируется, что создание и все вызовы будут сделаны одним и тем же потоком. Вы можете безопасно использовать локальное хранилище Thread, и вам не нужно использовать критические разделы.

Если вашему COM-объекту можно получить доступ к нескольким потокам одновременно, используйте MTA - там не будет никаких защитных устройств.

Ответ 4

Как отмечали другие, он, как правило, мало влияет на приложения .NET.

Однако имейте в виду, что тестовый узел Microsoft, используемый для модульных тестов, фактически реализован в STA, что означает, что существуют ограничения на то, что вы можете сделать в unit test. Например, вы не можете сделать WaitAll в WaitHandle в unit test, если вы используете тестовый хост Microsoft.

Ответ 5

Вам не нужно беспокоиться об этом, если вы не выполняете COM-interop, и в этом случае возникают проблемы с сортировкой. Он не имеет последствий для самой .net.