解决C#调用COM组件异常来自 HRESULT:0x80010105 (RPC_E_SERVERFAULT)的错误


最近C#调用COM时,遇到了异常来自 HRESULT:0x80010105 (RPC_E_SERVERFAULT)的错误

后面找了一下,发现是在线程里调用COM组件引起的。

C++调用COM时,会调用API函数CoInitializeEx来初始化COM,这里就指定了初始化为STA(单线程)和MTA(多线程)模式。

C#调用COM组件是用VS直接引用dll,VS应该是默认指定了STA方式,所以要在主线程里运行。

因此我们在线程访问COM时,需要使用Dispatcher类再封装一层。

 1         private void ThreadOP()
 2         {
 3             new System.Threading.Thread(DispatcherInvokeCOMOP) { IsBackground = true}.Start();                     
 4         }  
 5         
 6         private void DispatcherInvokeCOMOP()
 7         {
 8             //使用Dispatcher再封装一层            
 9             System.Windows.Application.Current.Dispatcher.Invoke(COMOP);
10         }
11 
12         private void COMOP()
13         {
14              //在这里调用COM
15         }

这是WPF的,Winform也有Dispatcher类,调用差不多的。

 

作者: zhaotianff

转载请注明出处


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM