一尘不染

STAThread和多线程

c#

从STAThread上的MSDN文章中:

指示应用程序的COM线程模型是单线程单元(STA)。

(供参考,这是整篇文章。)

单线程公寓…好吧,这让我头疼。另外,我在某处读到,除非您的应用程序使用COM互操作,否则此属性实际上什么都不做。那么它到底是做什么的,又如何影响多线程应用程序呢?Timer即使“为了安全”,多线程应用程序(包括从使用s到异步方法调用的任何内容,而不仅仅是线程池之类的东西)都应该使用MTAThread吗?STAThread和MTAThread实际上做什么?


阅读 353

收藏
2020-05-19

共1个答案

一尘不染

单元线程是COM概念。如果您不使用COM,并且您调用的所有API都不在“幕后”使用COM,那么您就不必担心公寓。

如果您确实需要注意公寓,那么细节可能会有些复杂;一个可能过于简化的版本是,标记为STA的COM对象必须在STAThread上运行,标记为MTA的COM对象必须在MTA线程上运行。使用这些规则,COM可以优化这些不同对象之间的调用,从而避免在不必要的地方进行封送处理。

2020-05-19