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