【问题标题】:ComboBox that shows all removable devices显示所有可移动设备的组合框
【发布时间】:2010-07-28 07:13:11
【问题描述】:

我有一个组合框 (ItemsSource="{Binding Path=AvailableDrives}")。

AvailableDrives 属性定义如下:

 public List<DriveInfo> AvailableDrives
    {
        get
        {
            return DriveInfo.GetDrives().Where(x => x.DriveType == DriveType.Removable).ToList();
        }
    }

它工作正常,但我希望如果我插入/拔出 USB 设备,组合框会重新填充而无需关闭并重新打开窗口。

我怎样才能做到这一点?

谢谢#

【问题讨论】:

    标签: c# wpf binding combobox usb


    【解决方案1】:

    在 codeproject 上有一个很好的例子:Detecting USB Drive Removal in a C# Program

    【讨论】:

    • 我相信这是正确的解决方案,但我设法使用计时器完成了我想做的事情。仍然竖起大拇指。
    【解决方案2】:

    简单的方法是在表单上放置一个计时器,并在其事件触发时查询驱动器。然后用新值更新组合框。

    【讨论】:

    • 感谢您的建议。我也会尝试这种方法。
    • 好吧,我有点用过这个解决方案。使用 System.Threading.Timer 并在更新时处理所选内容。它有效。
    【解决方案3】:

    正如 Prize 所述,最简单的解决方案是使用 DriveDetector 或类似名称。 这是一个例子:

        public void InitDriveDetector()
        {
            this.dd = new DriveDetector(); // create the drive detector
            // add new event handlers
            dd.DeviceArrived += new DriveDetectorEventHandler(dd_DeviceArrived);
            dd.DeviceRemoved += new DriveDetectorEventHandler(dd_DeviceRemoved);
        }
    
        void dd_DeviceRemoved(object sender, DriveDetectorEventArgs e)
        {
            Debug.WriteLine("{0} removed",e.Drive);
            //Will output something like "H:\ removed"
        }
    
        void dd_DeviceArrived(object sender, DriveDetectorEventArgs e)
        {
            Debug.WriteLine("{0} arrived",e.Drive);
            //Will output something like "H:\ removed"
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-13
      • 1970-01-01
      • 2021-05-12
      • 2020-05-19
      • 1970-01-01
      相关资源
      最近更新 更多