我找不到任何关于符合 MTA 的 COM 的先决条件的源代码。我尝试将对象的 ThreadingModel 注册表项从 Apartment 更改为 Both,当辅助线程在访问任何数据之前调用该方法时会导致崩溃。
如果 STA COM 需要消息泵,MTA COM 对象需要什么样的管道代码?
我不认为 MTA 有什么特别之处,只是您需要使用诸如互斥锁之类的同步原语来同步对内部结构的访问。“多线程公寓”不能满足您的所有需求吗?
引用文档,重点是我的:
因为对对象的调用不以任何方式进行序列化,所以多线程对象并发提供了最高的性能,并充分利用了多处理器硬件进行跨线程、跨进程和跨机器调用。然而,这意味着对象的代码必须在其接口实现中提供同步,通常通过使用同步原语,如事件对象、临界区、互斥体或信号量,这些将在本节后面进行描述。此外,因为对象不控制访问它的线程的生命周期,所以没有线程特定的状态可以存储在对象中(在线程本地存储中)。