Ahoj,
pro jednu Windows Service potřebuji detekovat odebrání a připojení USB zařízení, které pracuje jako virtuální COM. Po hledání jsem narazil na kód, který rozpozná připojení/odpojení jakéhokoliv USB zařízení. Co mne však udivuje, že je handler události volán 6x pro jednoduchá zařízení a 7x pro zařízení se 2 COMy. Při prvním volání handleru watcher_EventInsert "můj" COM není na seznamu, při dalších (5 nebo 6) voláních už je.
using System.Windows.Forms;
using System.Management;
using System.IO.Ports;
namespace VCPdetector2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
var remove_watcher = new ManagementEventWatcher();
var remove_query = new WqlEventQuery("SELECT * FROM Win32_DeviceChangeEvent WHERE EventType = 3"); //remove = 3, insert = 2
remove_watcher.EventArrived += new EventArrivedEventHandler(watcher_EventRemove);
remove_watcher.Query = remove_query;
remove_watcher.Start();
var insert_watcher = new ManagementEventWatcher();
var insert_query = new WqlEventQuery("SELECT * FROM Win32_DeviceChangeEvent WHERE EventType = 2"); //remove = 3, insert = 2
insert_watcher.EventArrived += new EventArrivedEventHandler(watcher_EventInsert);
insert_watcher.Query = insert_query;
insert_watcher.Start();
}
private void watcher_EventInsert(object sender, EventArrivedEventArgs e)
{
string[] ports = SerialPort.GetPortNames();
MessageBox.Show("inserted");
}
private void watcher_EventRemove(object sender, EventArrivedEventArgs e)
{
string[] ports = SerialPort.GetPortNames();
MessageBox.Show("removed");
}
}
}
Jak dosáhnout aby každá událost byla volána 1x a při její obsluze jsem zjistil, zda se týkala "mého" COMu? Nebo se na to musí jinak?
hu