2
我写了一个代码来显示连接的USB设备的描述(名称)。一次我删除了一个设备,然后我需要刷新管理对象并且必须显示连接的设备描述。如何刷新管理对象
这里是我的代码,
ManagementObjectSearcher searcher =
new ManagementObjectSearcher("SELECT * FROM Win32_USBControllerDevice");
foreach (ManagementObject mo in searcher.Get())
{
string str1 = mo["CurrentRefreshRate"].ToString();
Console.WriteLine(str1);
string dependent = mo["Dependent"].ToString();
string deviceId = dependent.Split('=')[1];
deviceId = deviceId.Replace('\"', '\'');
ManagementObjectSearcher searcher2 =
new ManagementObjectSearcher("SELECT * FROM Win32_PnPEntity Where DeviceID = " + deviceId);
foreach (ManagementObject mo2 in searcher2.Get())
{
HardwareDetails Detail = new HardwareDetails();
Detail.Description = mo2["Description"].ToString();
Detail.DeviceId = mo2["DeviceId"].ToString();
string[] str = Detail.DeviceId.Split('\\');
string Id = str[1];
if (Id.Contains('&'))
{
string[] separate = Id.Split('&');
Detail.Vid = separate[0].Contains('_') ? separate[0].Split('_')[1] : separate[0].Split('D')[1];
Detail.Pid = separate[1].Contains('_') ? separate[1].Split('_')[1] : separate[1].Split('D')[1];
//Detail.Pid = pid1[1];
}
else
{
Detail.Vid = "";
Detail.Pid = "";
}
if (list.Count > 0)
{
foreach (HardwareDetails h in list)
{
if (!(h.Description == Detail.Description))
{
list.Add(Detail);
break;
}
}
}
else
list.Add(Detail);
}
}
// remove duplicates, sort alphabetically and convert to array
HardwareDetails[] usbDevices = list.ToArray();
return usbDevices;
我不能理解如何在我的应用程序中使用我的编码。我将详细解释我。 – Ramya 2010-07-08 06:15:33
你可以添加事件处理程序到Windows设备的变化,提供的代码...您应该创建一个函数HandleEvent的签名EventArrivedEventHandler,并在该功能更新设备列表 – 2010-07-08 06:36:13
亚那thats correct.actually我也使用这样only.But事情是温我从我的电脑中删除任何设备,该列表仍显示删除的设备名称(列表将只显示连接的设备)。这是由于延迟系统刷新time.wilüPLZ建议我如何克服这个问题? – Ramya 2010-07-08 09:01:02