我正在为EXE制作DLL“插件”。 EXE以DLL作为参数调用DLL中的函数,并从那里开始。
一切正常,花花公子,直到我将它拆分为新线程。发生此错误
尝试读取或写入受保护的 记忆。这通常是一个迹象 其他记忆已经腐败。
在新线程中的对象上执行此代码时:
protected object GetPropertyValue(object obj, string PropertyName)
{
return obj.GetType().InvokeMember(PropertyName, BindingFlags.GetProperty, null, obj, new object[] { });
}
以上是尝试访问COM对象的属性。将功能更改为“公共”不会影响它。如果我只使用一个线程,代码就可以正常工作。
发生的事情很清楚:新线程无法访问EXE中的变量。我怎样才能解决这个问题?不使用线程不是一个可行的选择。
感谢任何帮助
答案 0 :(得分:4)
您的COM对象可能存在于STA中。这意味着您需要调度回拥有该对象的线程,并从那里进行调用。
如果COM对象支持空闲线程,那么它可能在STA中运行,因为您的main方法标有STA线程属性。
或者,如果您控制COM对象,则可以尝试将其设为MTA对象。
在这种情况下,请尝试删除该属性。但是,如果您使用的是Windows表单,则必须从STA线程创建表单。