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

最近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类再封装一层。

         private void ThreadOP()
{
new System.Threading.Thread(DispatcherInvokeCOMOP) { IsBackground = true}.Start();
} private void DispatcherInvokeCOMOP()
{
//使用Dispatcher再封装一层
System.Windows.Application.Current.Dispatcher.Invoke(COMOP);
} private void COMOP()
{
//在这里调用COM
}

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

作者: zhaotianff

转载请注明出处

上一篇:检索 COM 类工厂中 CLSID 为 {820280E0-8ADA-4582-A1D9-960A83CE8BB5} 的组件失败,原因是出现以下错误: 80040154 没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))。


下一篇:Word 远程调用失败:异常来自 HRESULT:0x800706BE