后面找了一下,发现是在线程里调用COM组件引起的。
C++调用COM时,会调用API函数
CoInitializeEx
来初始化COM,这里就指定了初始化为STA(单线程)和MTA(多线程)模式。
C#调用COM组件是用VS直接引用dll,VS应该是默认指定了STA方式,所以要在主线程里运行。
因此我们在线程访问COM时,需要使用Dispatcher类再封装一层。
1 private void ThreadOP()
3 new System.Threading.Thread(DispatcherInvokeCOMOP) { IsBackground = true}.Start();
6 private void DispatcherInvokeCOMOP()
8 //使用Dispatcher再封装一层
9 System.Windows.Application.Current.Dispatcher.Invoke(COMOP);
10 }
12 private void COMOP()
13 {
14 //在这里调用COM
这是WPF的,Winform也有Dispatcher类,调用差不多的。
作者: zhaotianff
转载请注明出处