STA применяется к объектам и функциям?

Насколько я понимаю STA, если мой поток выполняется в апартаменте STA, мне не нужно беспокоиться о безопасности потоков, и вызовы функций моего потока автоматически ставятся в очередь.

Мой вопрос заключается в том, что если я запускаю рабочий поток в STA, а затем получаю объект из этого потока через функцию, должен ли я беспокоиться о безопасности потока при использовании этого объекта? Или вызовы функций для этого объекта потокобезопасны?


person Grazi    schedule 25.02.2011    source источник


Ответы (2)


STA в основном имеет отношение к COM и к тому, как обрабатываются COM-объекты. Он не автоматически делает вещи безопасными в обычном коде .NET. Ничто не сможет автоматически сделать ваш код .NET потокобезопасным.

Предполагая, что вы имеете дело только с управляемым кодом, я предлагаю вам забыть об апартаментах, так как они вряд ли будут иметь отношение к тому, как вы пишете потокобезопасный код (или к тому, хотите ли вы сделать большую часть вашего кода потокобезопасным). (Обязательная ссылка: "Что вы называете потокобезопасным?" сообщение в блоге.)

person Jon Skeet    schedule 25.02.2011

Превращение потока в поток STA волшебным образом не делает ничего безопасным. Пометка потока как потока STA означает, что COM-объекты, необходимые для запуска в потоке STA, могут выполняться в этом потоке. Это делается для того, чтобы уровень COM знал, как правильно маршалировать вызовы.

Для краткого введения см.:

http://blogs.msdn.com/b/ericlippert/archive/2003/09/18/53041.aspx

person Eric Lippert    schedule 25.02.2011