我在.NET中创建了一个COM对象,并将其注册为使用Pooling = 1的COM +服务器应用程序regsvcs.我目前正在寻找一个bug,因此需要确保这个COM对象在STA中运行,而不是在MTA中运行.我怎么指定这个?
以下任何一项都会对我有所帮助:
更新:
我尝试手动ThreadingModel将注册表中的条目更改Both为Apartment.这也没有帮助,因为当我尝试实例化COM对象时,我得到一个COMException(0x80110802)并且事件查看器说:
注册表中指定的组件的线程模型与注册数据库不一致.有缺陷的组件是:
<MyComponent>
我需要更改线程模型吗?例如在"注册数据库"中?我在哪里可以找到它?
谢谢!
好的,我在作为 COM 对象公开的类中插入了以下代码,它似乎可以工作:
[ComRegisterFunction]
private static void Register(Type registerType)
{
if (registerType != null)
{
using (RegistryKey clsidKey = Registry.ClassesRoot.OpenSubKey("CLSID"))
{
using (RegistryKey guidKey = clsidKey.OpenSubKey(registerType.GUID.ToString("B"), true))
{
using (RegistryKey inproc = guidKey.OpenSubKey("InprocServer32", true))
{
inproc.SetValue("ThreadingModel", "Apartment", RegistryValueKind.String);
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我不明白,在所有的,为什么用手改变的ThreadingModel不产生相同的结果,但我不在乎...
| 归档时间: |
|
| 查看次数: |
1873 次 |
| 最近记录: |