解決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