最近项目的程序修改 需要使用COM控件 由三个DLL组成 其中两个是语言包由于前期项目已经在客户那里安装 只要能自动更新就行了 我们这个程序是的机制是先由一个项目的Splash窗体来自动更新 然后利用Assembly来反射动态加载登录窗体的那个项目 然后用Activator.CreateInstance来创建出登录窗体,我需要在登录窗体里加载COM控件,于是我在登录窗体里写了注册这个COM组件的方法也正常,但到了实例化那个COM组件时就报错:当前线程不在单线程单元中,因此无法实例化 ActiveX 控件,想了很多办法无法解决,希望大家帮忙解决下。项目A为启动项目,在A中的启动窗体中利用Assembly反射项目B中的一个窗体,在项目B的这个窗体里注册COM,加载COM控件,代码执行到COM控件实例化时报错:当前线程不在单线程单元中,因此无法实例化 ActiveX 控件
解决方案 »
- 有哪位知道Winform中 datagridview多选是怎么实现的?
- winform 做的一个客户端装在客户的电脑上为什么会报错如图
- ScriptManager.RegisterStartupScript()这个方法在IE8中不起作用
- 轮询系统异常跳出问题
- 我想兼容多数据库 iBATIS能不能解决?
- 求一正则表达式: 查找除了AD,AO,AK之外的所有以A开头的连续字母组合
- 类似按键精力(比按键精力简单很多)的项目,RMB外包有能力的请进来
- 请教:当我insert数据库一条新的记录的时候,我怎样取到这条记录自动生成的ID值?
- 关于DataGrid控件
- 一个简单的小问题?(急)谢谢!
- DataList中判断绑定数据的状态
- htmltable合并单元格的问题
ActiveX对象的声明放到主线程中.
.ScriptErrorsSuppressed = true;
对此对象的操作可以继续在其他线程 主线程MAIN函数要加
[STAThread]以表示应用程序的 COM 线程模型是单线程单元
Console.WriteLine("Before setting apartment state: {0}",
t.GetApartmentState()); t.SetApartmentState(ApartmentState.STA);
Console.WriteLine("After setting apartment state: {0}",
t.GetApartmentState()); bool result = t.TrySetApartmentState(ApartmentState.MTA);
Console.WriteLine("Try to change state: {0}", result); t.Start();新建线程时先将线程设为单线程单元ApartmentState.STA,然后再运行在启动新线程之前尚未设置它们的单元状态,则这些新线程将初始化为 ApartmentState.MTA。必须在启动线程之前设置单元状态