我是 C#编程的新手,我正在处理这样的场景:
我有一个Winform,其中WndProc方法被覆盖为:
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
if (m.Msg == USBNotification.WmDevicechange)
{
switch ((int)m.WParam)
{
case DEVICE_REMOVE:
DEV_BROADCAST_VOLUME vol =(DEV_BROADCAST_VOLUME)Marshal.PtrToStructure(m.LParam, typeof(DEV_BROADCAST_VOLUME));
Usb_DeviceRemoved();
break;
case DEVICE_ADDITION:
DEV_BROADCAST_VOLUME vol2 = (DEV_BROADCAST_VOLUME)Marshal.PtrToStructure(m.LParam, typeof(DEV_BROADCAST_VOLUME));
Usb_DeviceAdded();
break;
}
}
}
所以基本上我的表单是获取设备添加和删除的通知
在" Usb_DeviceRemoved()
" ,我检查我的相关设备是否被删除(WMI查询)并运行一些代码(基本上在设备不再存在的代码中设置一些变量)。
同样在" Usb_DeviceAdded()
" ,我检查是否添加了我的相关设备(WMI查询)并激活该设备(某些代码)。
问题:
让我们说USB设备被删除了" Usb_DeviceRemoved()
"被称为,现在执行" Usb_DeviceRemoved()
" USB设备已连接,执行将跳转到" Usb_DeviceAdded()"。
但我想" Usb_DeviceRemoved()
"一次性执行。
P.S:我的winform在主线程(STA)中运行,我希望一切都在同一个线程中完成
无论如何都要运行" Usb_DeviceRemoved()
"和" Usb_DeviceAdded()
"原子