指定从proc COM对象实例化时要使用的单元状态

|| 我在.NET中创建了一个COM对象,并使用“ 0”将其注册为Pooling = 1的COM +服务器应用程序。我当前正在寻找一个错误,因此需要确保此COM对象在STA中而不是MTA中运行。我该如何指定? 以下任何一项对我都有帮助: 组件服务管理单元中的设置 设置/代码片段,使COM对象仅允许STA而不允许Both 调用方的C#中的设置/代码片段,告诉COM +应该使用STA初始化COM对象。 更新: 我试图手动将注册表中的“ 1”项从“ 2”更改为“ 3”。这也没有帮助,因为当我尝试实例化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);
                }
            }
        }
    }
}
我根本不明白,为什么手动更改ThreadingModel不会产生相同的结果,但是我不在乎...

要回复问题请先登录注册