WMI USB监视器已触发多个事件

时间:2013-07-10 06:38:07

标签: usb wmi

我一直在尝试监控何时插入或移除USB设备,它似乎运行良好。现在唯一困扰我的是每次插入设备或删除设备时都会多次触发事件。

我可以毫无问题地对这些事件进行分组,但我很好奇为什么它会在一开始就发生。

这是我正在使用的查询

SELECT * FROM Win32_DeviceChangeEvent WHERE EventType = 2 or EventType = 3

插入或移除设备时会触发。以下修改版本......

SELECT * FROM Win32_DeviceChangeEvent WHERE EventType = 2 or EventType = 3 GROUP WITHIN 1

以1秒的间隔对事件进行分组。有人可以解释为什么事件会被多次触发吗?

为了完整性,这里是代码的其余部分。

        static void Main(string[] args)
    {
        var watcher = new ManagementEventWatcher();
        var query = new WqlEventQuery("SELECT * FROM Win32_DeviceChangeEvent WHERE EventType = 2 or EventType = 3 GROUP WITHIN 1 ");
        watcher.EventArrived += new EventArrivedEventHandler(watcher_EventArrived);
        watcher.Query = query;
        watcher.Start();

        Console.WriteLine("Press a key to exit.");
        Console.ReadKey();
    }

    static void watcher_EventArrived(object sender, EventArrivedEventArgs e)
    {
        Console.WriteLine(string.Format("--> {0}", e.NewEvent.GetType().Name));
        Console.WriteLine(string.Format("   {0}", e.NewEvent.ClassPath.ClassName));
        Console.WriteLine(string.Format("   Properties [{0}]", e.NewEvent.Properties.Count));
        foreach (var prop in e.NewEvent.Properties)
        {
            Console.WriteLine(string.Format("     Name: {0} Origin: {1} Type: {2} = {3}", prop.Name, prop.Origin, prop.Type.ToString(),prop.Value==null?"{null}":prop.Value.ToString()));
        }
}

1 个答案:

答案 0 :(得分:0)

如果您的USB磁盘有两个虚拟磁盘或另一个激活许多更改事件的USB配置,则可能会发生这种情况。