.NET 下 STA(单线程套间/单元)的意义

STA本身不是.NET平台的产物,它起原于1993年面世的COM(组件对象模型)的发布.
多么希望我是一个COM编程的高手,以至于将.NET中这个问题描述的更加透彻.
必境CLR的前身就是COM,当CLR还在被开发时,它有过的名字有COM+,COM3.

1 COM 线程模型
   COM线程本质就是win32线程,只不过重新定义了术语而已.
   对应于win32的UI线程的COM线程叫单线程套间,而非UI线程叫自由线程.
   每个STA都有一个隐藏的USER32窗口,并且具有消息循环机制用于处理windows消息事件.

2 .NET中为什么要引入STA?
   我并不知道真实的原因,但是我却知道一些.NET中需要STA机制理由,我想就是真正的原因.
   与COM互操作这个理由足够充分,ASP.NET Framework是从COM自然发展而来的,为了实现向后兼容,COM互操作允许对现有的COM组件进行访问而无需修改原始组件.
   由于COM类使用套间,因此CLR需要在COM互操作的情况下创建并初始化一个套间(STA/MTA).
   单线程套间中只能有一个线程在运行,这就是它名字的含义,所以COM组件就省掉了许多对象同步的烦脑.
   单线程套间中创建的组件,只能由创建它的那个线程访问,这非常类似于WIN FORMS编程中的UI组件的更新,必须由UI线程来处理(大多数开发者都用过Control.Invoke吧).
   在.NET类库中就有一些类,它们必须运行在STA模式中.例如:System.Windows.Forms.Clipboard, WebBrowser.

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12639172/viewspace-662335/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/12639172/viewspace-662335/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值