多么希望我是一个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/