当前位置:  开发笔记 > 编程语言 > 正文

单螺纹公寓vs多线程公寓

如何解决《单螺纹公寓vs多线程公寓》经验,为你挑选了4个好方法。

STA(单线程公寓)和MTA(多线程公寓)与COM有关.COM组件可以设计为由单个线程访问,在这种情况下,它们托管在STA中,或者它们可以在内部线程安全,并托管在MTA中.一个进程只能有一个MTA,但有很多STA.如果您只是要消耗COM组件,那么您真正需要知道的是您必须将公寓与组件匹配,否则会发生令人讨厌的事情.



1> Stu Mackella..:

STA(单线程公寓)和MTA(多线程公寓)与COM有关.COM组件可以设计为由单个线程访问,在这种情况下,它们托管在STA中,或者它们可以在内部线程安全,并托管在MTA中.一个进程只能有一个MTA,但有很多STA.如果您只是要消耗COM组件,那么您真正需要知道的是您必须将公寓与组件匹配,否则会发生令人讨厌的事情.



2> 小智..:

实际上,STA和MTA对.NET代码有影响.请参阅Chris Brumme的博客文章,了解更多细节,然后您可能需要:

http://blogs.msdn.com/cbrumme/archive/2004/02/02/66219.aspx

了解STA如何在.NET中输出消息非常重要.它确实有后果.



3> Lou Franco..:

如果您的COM对象需要相信它在单线程环境中,请使用STA.您可以保证创建和所有调用都将由同一个线程完成.您可以安全地使用Thread本地存储,而不需要使用关键部分.

如果您的COM对象可以被许多线程同时访问,请使用MTA - 没有防护措施到位.


有几个.Net特定点.最重要的是WinForms或WPF应用必须在STA中拥有主线程.这是因为很多UI功能都是围绕COM实现的控件的瘦.Net包装器.因此.Net应用程序中Main方法的[STAThreadAttribute].

4> Brian Rasmus..:

正如其他人所指出的,它通常对.NET应用程序几乎没有影响.

但是,请注意,用于单元测试的Microsoft测试主机实际上是在STA中实现的,这意味着在单元测试中可以执行的操作存在限制.例如,你不能做WaitAll一个WaitHandle在单元测试中,你正在使用微软的测试主机.

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有