首页 > 编程语言 > 详细

WMI获取USB设备信息报错 : 应用程序调用一个已为另一线程整理的接口。 (异常来自 HRESULT:0x8001010E (RPC_E_WRONG_THREAD))。

时间:2020-03-20 15:14:35      阅读:666      评论:0      收藏:0      [点我收藏+]

出错代码

 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();
                }

  

 

WMI获取USB设备信息报错 : 应用程序调用一个已为另一线程整理的接口。 (异常来自 HRESULT:0x8001010E (RPC_E_WRONG_THREAD))。

原文:https://www.cnblogs.com/arvinlaw/p/12531414.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!