我读到了公寓模型,但当我试图理解以下内容时,我仍然感到困惑:谁的公寓决定了公寓模型?是线程的公寓还是创建对象的公寓?
考虑以下场景:
我创建了只有一个接口的 C++ ATL COM dll
ISimpleCom
,并且我有一个类实现该接口,该接口只有一个方法test();
此类公开继承自CComObjectRootEx<CComSingleThreadModel>
它设置 STA 单元。在 C# WinForms 项目中引用此 DLL,并
SimpleCom
在 MTA 线程(而不是 UI 线程)上创建对象。问题是:假设 UI 线程调用test()
此对象,它将被编组到创建对象的线程还是将在 UI 线程上执行?- 如果它遵循对象 COM 单元,则此调用应封送到创建对象的线程,因为它是一个 STA 对象。
- 如果它在创建 MTA 线程单元之后,它应该在 UI 线程上执行。
哪一个是正确的?