1
7
COM服务器用名为threading model的注册表项通告它所需的线程模型。如果注册表项丢失或设置为“公寓”,则默认为单线程。 regasm.exe将此密钥设置为“both”。这意味着您的服务器声明与STA线程和MTA线程都兼容。在某种程度上与.NET代码保持一致,它支持线程,但需要注意线程安全。更改这个非常困难,您必须编写自己的注册过程,并用[ComRegisterFunction]属性对其进行注释。 简单的方法是将密钥设置为“both”,并检查类构造函数中的单元状态。使用thread.getCurrentThread().getApartmentState()。如果您得到了MTA,那么抛出一个异常来告诉客户机您不支持多线程。许多.NET类都这样做。 |
2
2
见 this answer 例如,执行必要注册表voodoo的comregisterFunction。在某些情况下,您可能需要这样做——例如,当您希望确保线程是STA时,这样您就可以与只需要由STA线程使用的其他COM对象进行交互。 |
Robert King · Unity C#语法问题-转换位置 1 年前 |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
i_sniff_ket · 在unity之外使用unity类 2 年前 |