日期:2014-05-18  浏览次数:21635 次

当前线程不在单线程单元中,因此无法实例化 ActiveX 控件(C#)
如题,在主程序中创建了一个线程,该线程创建一个usercontrol,并将usercontrol显示在主程序窗体中。程序运行出现“当前线程不在单线程单元中,因此无法实例化 ActiveX 控件”的提示错误!寻求解决方案。usercontrol中引用的ActiveX控件是第三方的一个图形控件(mapcontrol)。有C#例子最好不过。初次接触,所以不懂。望指点迷津。

------解决方案--------------------
主程序是否有加[STAThread]属性?
------解决方案--------------------
在窗体的主线程中写一个delegate就能解决这个问题。楼主的做法违反了线程安全的原则。
------解决方案--------------------
关注,以前有过类似的问题,但没解决
------解决方案--------------------
在主窗体的类代码中:
delegate void procCallBack(...);

线程处理过程:
private void procThread(...)
{
if(this.InvokeRequired)
{
procCallBack p = new procCallBack(...);
this.Invoke(d, new object[]{...});
}
else
{
......//子线程应处理的内容
}
}
------解决方案--------------------
这个应该是与COM组件交互引起的线程问题了.