![]() |
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对象进行交互。 |
![]() |
Emopusta · 从后端到前端的图像路径不工作 2 年前 |
![]() |
Asdrubal Hernandez · Linq查询特定数组索引出错 2 年前 |
![]() |
Niyazi Babayev · 如何在表达式中动态应用表达式? 2 年前 |
|
Dansih · .Net核心自定义身份验证方案 2 年前 |
![]() |
lolorekkk · 面板插入。NET WinForm 2 年前 |