STA vs MTA

本篇最初在2008年3月25日发表于我的MSN空间

原帖:Excel .Net Threading problem

客户想通过多线程单元访问和处理Excel组件,但遇到错误,并陷入创建线程到底是STA和MTA的问题。咨询了一下公司的OFFICE方面的专家,得到了答案:Office is designed as STA。

HKEY_CLASSES_ROOT -> CLSID -> InprocServer32 -> ThreadModel

STA (单线程单元) MTA
Windows NT 3.51引入 Windows NT 4.0 引入
只允许一个实例线程访问组件,不需要考虑多个线程访问实例变量的问题,因为这种保护是由COM特性实现的 多个线程可以同时访问组件
COM对象不是线程安全,需要在注册表中把注册键ThreadingModel设置为Apartment COM对象线程安全,ThreadingModel设置为Free。值Both用于不考虑单元类型的线程安全的COM对象

 

Bruno Yu

posted on 2009-07-18 12:21  清晨  阅读(266)  评论(0编辑  收藏  举报

导航