.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.
 
Advertisements
此条目发表在Asp .NET分类目录。将固定链接加入收藏夹。

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

  1. 熊力说道:

    STA和UI Thread没有任何关系.NET的Console程序,没有任何UI,也可以是STA如果现在不清楚什么是STA的话,千万不要强求自己去弄懂。

  2. 说道:

    我没有说 STA 与 UI 线程 有关系.另外.net控制台程序,如果你没有标sta,那么将不能调用com组件.根ui没有关系.我希望你也能说说你知道的.

  3. 熊力说道:

    那可能是我误会你下面这句话的意思是了."对应于win32的UI线程的COM线程叫单线程套间,而非UI线程叫自由线程"

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

You are commenting using your WordPress.com account. Log Out /  更改 )

Google+ photo

You are commenting using your Google+ account. Log Out /  更改 )

Twitter picture

You are commenting using your Twitter account. Log Out /  更改 )

Facebook photo

You are commenting using your Facebook account. Log Out /  更改 )

w

Connecting to %s