usb - WMI USB 监视器触发多个事件

标签 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()));
        }
}

最佳答案

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

关于usb - WMI USB 监视器触发多个事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17563969/

相关文章:

c# - 如何在 C# 中从 USB token 读取证书

android - 如何访问 Android TV 设备上的应用程序日志?

windows - Windows 闪存驱动器上出现一个 _disk_id.pod 文件

PHP 和 Windows WMI、CPU 温度和错误读数?

algorithm - 服务器监控和通知的逻辑/算法

windows - 如何判断 Win32_NTLogEvent InsertionString 是否存在?

c - 以 31250 波特率从 USB 读取数据

c# - 如何在 .net 中为网络适配器设置 dns 搜索后缀?

windows - 远程查询Windows事件日志(Linux)

linux - USB 网络是如何工作的