WMI獲取USB設備信息報錯 : 應用程序調用一個已為另一線程整理的接口。 (異常來自 HRESULT:0x8001010E (RPC_E_WRONG_THREAD))。


出錯代碼

 using (var managementClass = new ManagementClass("Win32_DiskDrive"))
                {
                        var devices = managementClass.GetInstances();
                        foreach (var o in devices)
                        {
                            try
                            {
                                var mo = (ManagementObject) o;
                                var device = mo["Caption"].ToString();
                                disks += mo["Caption"] + ";";
                            }
                            catch (Exception e)
                            {
                                _log.WriteLog(LogType.Error, $@"GetDisk:{e}");
                            }
                        }
                }      

  以上代碼會拋出異常“GetDisk:System.InvalidCastException: 無法將類型為“System.__ComObject”的 COM 對象強制轉換為接口類型“System.Management.IWbemServices”。此操作失敗的原因是對 IID 為“{9556DC99-828C-11CF-A37E-00AA003240C7}”的接口的 COM 組件調用 QueryInterface 因以下錯誤而失敗: 應用程序調用一個已為另一線程整理的接口。 (異常來自 HRESULT:0x8001010E (RPC_E_WRONG_THREAD))。”

解決方法:

將獲取設備信息在新的線程中運行

 using (var managementClass = new ManagementClass("Win32_DiskDrive"))
                {
                    var t = new Thread(() =>
                    {
                        var devices = managementClass.GetInstances();
                        foreach (var o in devices)
                        {
                            try
                            {
                                var mo = (ManagementObject) o;
                                var device = mo["Caption"].ToString();
                                disks += mo["Caption"] + ";";
                            }
                            catch (Exception e)
                            {
                                _log.WriteLog(LogType.Error, $@"GetDisk:{e}");
                            }
                        }
                    });
                    t.Start();
                    t.Join();
                }

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM