我对STA的理解是,如果我的线程在STA公寓中运行,那么我不必担心线程安全,并且对我的线程函数的调用会自动排队。
我的问题是,如果我在STA中启动一个工作线程然后通过一个函数从该线程获取一个对象,那么在使用该对象时我是否必须担心线程安全?或者该对象的函数调用是否是线程安全的?
答案 0 :(得分:2)
STA基本上与COM有关,以及如何处理COM对象。它不会在正常的.NET代码中自动安全地生成东西。没有什么能够自动使您的.NET代码成为线程安全的。
假设您只是处理托管代码,我建议您忘记公寓,因为它们不太可能与您编写线程安全代码的方式相关(或者实际上您是否 使大部分代码都是线程安全的。 (必要参考:Eric Lippert的"What is this thing you call thread safe?"博客文章。)
答案 1 :(得分:2)
使一个线程成为一个STA线程并不会让任何事情变得安全。将线程标记为STA线程意味着可以在该线程上运行需要在STA线程上运行的COM对象。这样COM层就知道如何正确地编组调用。
有关简要介绍,请参阅:
http://blogs.msdn.com/b/ericlippert/archive/2003/09/18/53041.aspx