【问题标题】:Using COM Apartment STA使用 COM 公寓 STA
【发布时间】:2013-07-18 16:46:59
【问题描述】:

看了大部分关于这个话题的帖子,我还是一头雾水。

如果我在 .Net 中使用来自多个线程的 COM STA DLL 实例,COM 技术不会使用队列序列化调用吗?

var instance = new 3PartyComStaLib()

多个线程在做

instance.doWork();

如果是真的,这样可以吗,唯一的惩罚是它会很慢?

【问题讨论】:

  • 术语很混乱,在 sn-p 中实际上没有可见的调用,但粗略的答案是“是”。这不是什么大问题,这就是你想知道的全部吗?

标签: com sta


【解决方案1】:

只要您不违反最终规则,对 STA 对象的 COM 调用将被序列化。特别是,您必须确保您的代码不会跨公寓边界传递原始 COM 指针。

当您的 STA 代码需要将 COM 指针传递给另一个线程和单元时,您需要对指针进行编组(例如,使用奇妙的 CoMarshalInterThreadInterfaceInStream API),然后在目标流上解组,让 COM 有机会创建代理/存根对并设置有问题的序列化。

【讨论】:

    猜你喜欢
    • 2013-04-10
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-30
    相关资源
    最近更新 更多