2010-07-28 4 views
0

J'ai une liste déroulante (ItemsSource = "{Binding Path = AvailableDrives}").ComboBox qui affiche tous les périphériques amovibles

La propriété AvailableDrives est définie comme ceci:

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

Il fonctionne bien, mais je voudrais que si je branche/un périphérique USB que le comboBox se repeuple sans avoir à fermer et rouvrir la fenêtre .

Comment puis-je y parvenir?

# Thanx

Répondre

1

méthode simple sera de mettre une minuterie sur votre formulaire et requête pour les lecteurs lorsque ses feux de l'événement. Ensuite, mettez à jour la zone de liste déroulante avec de nouvelles valeurs.

+0

merci pour le conseil. Je vais essayer cette approche aussi. – no9

+0

Eh bien, j'ai un peu utilisé cette solution. Utilisé System.Threading.Timer et géré le sélectionné quand il est mis à jour. Ça marche. – no9

3

Il y a un bon exemple de la façon de le faire sur CodeProject: Detecting USB Drive Removal in a C# Program

+0

Je crois que c'est la bonne solution, mais j'ai réussi à faire ce que je voulais en utilisant la minuterie. Toujours les pouces levés. – no9

1

Comme prix indiqué, la meilleure solution serait d'utiliser DriveDetector ou similaire. Voici un exemple:

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" 
    } 
Questions connexes