做工控的,经常要用C#写上位机,这时,USB的驱动是一个无法避免的问题,其中,如果要做得好,必须得处理检测USB是否插入的问题。
目前是用一个 DispatcherTimer定时器 也定时检测是否插入,至于为什么要用这个定时器,是因为WPF中,这和UI处于同一个线程,无需处理跨线程的问题。
定时检测的代码是从USB的驱动代码里抠出来的,因为USB驱动的第一步就是搜索USB设备。后面才是打开USB等一系列操作。所以,把这个搜索的代码复制出来,单独成一个函数,就是检测USB是否插上的代码了。
这次的是HID USB,搜索HID USB,检测USB是否插入的代码如下:
public bool IsPlusUsb()
{
USBHID usbHID_plus = new USBHID();
string DstDev = "";
System.Diagnostics.Debug.Print("搜索到的USB HID 设备如下; ");
foreach (string device in usbHID_plus.GetDeviceList())
{
System.Diagnostics.Debug.Print(device);
if (device.IndexOf("1111") >= 0 && device.IndexOf("2222") >= 0)
{
DstDev = device;
}
}
System.Diagnostics.Debug.Print("");
if (DstDev.Length > 0)
{
System.Diagnostics.Debug.Print("目标USB-HID设备为:");
System.Diagnostics.Debug.Print(DstDev);
}
else
{
System.Diagnostics.Debug.Print("错误:找不到目标USB-HID设备");
//while (true) { }
return false;
}
return true;
}
最终效果如下: