![]() |
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对象进行交互。 |
![]() |
A B · C#Excel自动调整列避免长文本时出错 4 月前 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 4 月前 |
![]() |
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 4 月前 |
|
Sei · Avalonia/WPF将路由器传递到控制模板 5 月前 |