解决C#调用COM组件异常来自 HRESULT:0x80010105 (RPC

您所在的位置:网站首页 异常来自于HRESULT:0x80041FE1 解决C#调用COM组件异常来自 HRESULT:0x80010105 (RPC

解决C#调用COM组件异常来自 HRESULT:0x80010105 (RPC

2024-07-11 22:56| 来源: 网络整理| 查看: 265

最近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

转载请注明出处



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3