可能重复:
你能解释一下STA和MTA吗?
所有线程池线程都在多线程公寓中。
--根据MSDN所述
这是什么意思?我真的很关心多线程与单线程公寓模型之间的区别是什么。或者公寓模型是什么意思?我已经阅读了MSDN上的内容,但对我来说并不是很清楚。我认为我可能有一个想法,但我想在这里有人可以用简单的英语解释一下。
谢谢, 安东尼 D
更新1
找到了这个 你能解释一下STA和MTA吗?
有人能更详细地解释吗?
更新2
我还在寻找关于如何将其应用于线程池以及因此需要注意什么的答案。
可能重复:
你能解释一下STA和MTA吗?
所有线程池线程都在多线程公寓中。
--根据MSDN所述
这是什么意思?我真的很关心多线程与单线程公寓模型之间的区别是什么。或者公寓模型是什么意思?我已经阅读了MSDN上的内容,但对我来说并不是很清楚。我认为我可能有一个想法,但我想在这里有人可以用简单的英语解释一下。
谢谢, 安东尼 D
更新1
找到了这个 你能解释一下STA和MTA吗?
有人能更详细地解释吗?
更新2
我还在寻找关于如何将其应用于线程池以及因此需要注意什么的答案。
https://devblogs.microsoft.com/cbrumme/apartments-and-pumping-in-the-clr/
了解在.NET中如何进行STAs消息泵的操作确实非常重要,因为这会产生后果。
如果您的COM对象需要认为它在单线程环境中运行,请使用STA。这样可以保证创建和所有调用都由同一个线程进行。您可以安全地使用Thread local storage,而无需使用临界区。
如果您的COM对象可能被多个线程同时访问,请使用MTA,不会设置任何保护措施。
正如其他人指出的那样,它通常对.NET应用程序影响很小。
然而,请注意,用于单元测试的Microsoft测试主机实际上是在STA中实现的,这意味着在单元测试中有一些限制。例如,如果你正在使用Microsoft的测试主机,则无法在单元测试中对WaitHandle
执行WaitAll
操作。
除非进行COM-Interop,否则您不必担心它,因为这会涉及到编组问题。这对于 .NET 本身没有任何影响。