【问题标题】:WMI USB Monitor Multiple Events FiredWMI USB 监视器触发多个事件
【发布时间】:2013-07-07 23:44:10
【问题描述】:

我一直在尝试监控何时插入或移除 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()));
        }
}

【问题讨论】:

  • 你插入的是USB手机吗?我已经看到安卓手机经常发生这种情况。与USB设备和系统之间的配置连接协商有关。
  • 不,实际上我正在测试的设备是一个简单的 USB 音频设备,但真正的设备是一个颜色测量设备,看起来就像一个简单的串行设备。

标签: usb wmi


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    • 2017-01-08
    • 1970-01-01
    • 2019-12-29
    相关资源
    最近更新 更多