从STAThread上的MSDN文章中:

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

(作为参考,这是the entire article.)

单线程公寓...好吧,我听不懂.此外,我在某个地方读到,除非应用程序使用COM互操作,否则这个属性实际上什么都不做.那么它到底做了什么,以及它如何影响多线程应用程序呢?多线程应用程序(包括从使用Timers到异步方法调用的任何应用程序,而不仅仅是线程池等)是否应该使用MTAThread,即使是"为了安全起见"?StatThread和MTAThread实际上做什么?

推荐答案

单元线程化是一个COM概念;如果您没有使用COM,并且您调用的API都没有"暗中"使用COM,那么您就不需要担心单元了.

如果你真的需要了解公寓,那么细节可以得到a little complicated;一个可能过于简化的版本是,标记为STA的COM对象必须在STA线程上运行,而标记为MTA的COM对象必须在MTA线程上运行.使用这些规则,COM可以优化这些不同对象之间的调用,避免不必要的封送.

.net相关问答推荐

MassTransit RespondAsync 无法返回空值

使用 MassTransit、.NET Core 和 RabbitMQ 的设计挑战

仅在有换行符时捕获分隔符之间的所有文本

使用 SSH.NET 查找具有特定文件名的最新 SFTP 文件

dotnet 恢复警告 NU1701

使用带有大数据的 SqlCommand 异步方法的可怕性能

Nuget 连接try 失败“无法加载源的服务索引”

指定的版本字符串不符合要求的格式——major[.minor[.build[.revision]]]

ASP.NET Core (.NET Core) 和 ASP.NET Core (.NET Framework) 的区别

在 .NET Core RC2 中构建 .exe 文件

是否有可以接受命名输入参数而不是索引占位符的“String.Format”?

nameof 的目的是什么?

关于 Task.Start() 、 Task.Run() 和 Task.Factory.StartNew() 的使用

C# 6.0 是否适用于 .NET 4.0?

添加对 MEF 插件项目的引用时,为什么会出现警告图标?

CryptographicException 未处理:系统找不到指定的文件

Owin Twitter登录-根据验证程序远程证书无效

IEnumerable vs IReadonlyCollection vs ReadonlyCollection 用于公开列表成员

NuGetPackageImportStamp 有什么用?

使用 Json.NET 将任何类型的对象转换为 JObject