可能的重复:
您能解释一下 STA 和 MTA 吗?

所有ThreadPool线程都在多线程公寓中。

——根据 MSDN

这意味着什么?我真的很关心多线程公寓模型与单线程公寓模型之间的区别。或者说公寓型号是什么意思?我读过MSDN,但对我来说并没有什么意义。我想我可能有一个想法,但我想这里有人可以用简单的英语解释它。

谢谢,安东尼D

更新1

找到了这个您能解释一下 STA 和 MTA 吗?

谁能更详细地描述一下吗?

更新2

我也在寻找关于这如何应用于线程池的答案,以及因此我需要注意什么。

有帮助吗?

解决方案

STA(单线程单元)和MTA(多线程单元)是做的 通讯. 。COM 组件可以设计为由单个线程访问,在这种情况下,它们托管在 斯塔, ,或者它们可以在内部线程安全,并托管在 MTA. 。一个进程只能有一个MTA,但可以有多个STA。如果您只想使用 COM 组件,那么您真正需要知道的是必须将单元与组件相匹配,否则就会发生令人讨厌的事情。

其他提示

在现实中,STA和MTA的对.NET代码产生影响。查看方式更详细克里斯Brumme的博客文章,那么你可能需要:

https://devblogs.microsoft.com/ cbrumme /公寓和 - 泵送 - 内式CLR /

这是真正重要的是了解的STA如何.NET抽取消息。它确实有后果。

如果您的COM对象需要相信它是在单线程环境中,使用STA。这样保证了创建和所有呼叫都将通过同一个线程进行。您可以安全地使用线程本地存储,你不需要使用的关键部分。

如果您的COM对象可以由多个线程同时访问,使用MTA - 不会有警卫到位

正如其他人指出的那样,通常对.NET应用程序的影响很小。

但要注意的是,用于单元测试的微软测试主机在STA,这意味着有上,你可以在单元测试做什么限制实际实施。例如,你不能做一个WaitAll在一个单元测试WaitHandle是你正在使用微软的测试主机。

您不必担心它,除非你正在做的COM-互操作,在这种情况下,有编组的问题。它有没有后果.NET本身。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top