2010-02-22 4 views
2

Mon application fait cela, joue le son sélectionné en utilisant wmplib et sur statechangeevent = 1 (lecteur multimédia arrêté), je vais fermer le lecteur en utilisant la commande close() et en définissant l'URL à "";Fileinfo delete command

Maintenant, à chaque fois, j'ai essayé de supprimer un son en cours de lecture, en fait, il sera supprimé, parce que quand j'ai regardé le répertoire, le fichier a été supprimé. Chaque fois que je supprime un fichier, je rechargerai les contrôles qui listeront le fichier multimédia dans le répertoire. Cependant, il trouvera toujours le son qui a déjà été supprimé dans le répertoire. J'ai essayé de cette façon, le débogage lentement, et j'ai découvert que la commande File info delete() prend plus de temps à supprimer, étant donné que la fermeture du lecteur multimédia prend plus de temps à être supprimée, c'est pourquoi chaque fois J'essaie de recharger les collections après avoir supprimé une chanson en cours de lecture, la chanson supprimée est toujours là. Lorsque j'essayais de supprimer lorsque le lecteur multimédia ne jouait pas le morceau, il disparaissait rapidement et les collections de rechargement montraient le résultat de la chanson disparue.

La question est, comment puis-je supprimer le fichier en cours de lecture, en s'assurant que les collections de rechargement afficheront le nombre correct de chansons dans le répertoire?

Toute aide serait grandement appréciée.

Mon code est le suivant.

DirectoryInfo di = new DirectoryInfo(@"C:/Sounds/Custom Sounds/"); 
     FileInfo[] filepaths = MultipleFileFilter(di, "*.mp3,*.wma,*.wav"); 
     for (int i = 0; i < filepaths.Length; i++) 
     { 
      if (Path.GetFileNameWithoutExtension(Convert.ToString(filepaths[i]))== deleteItem) 
      { 

       System.IO.FileInfo fi = new System.IO.FileInfo(@"C:/Sounds/Custom Sounds/" + Convert.ToString(filepaths[i])); 
       fi.Delete(); 
      } 
     } 

// Load the sounds 
     DirectoryInfo dii = new DirectoryInfo(@"C:/Sounds/Custom Sounds/"); 
     FileInfo[] filess = MultipleFileFilter(dii, "*.mp3,*.wma,*.wav"); 
     for (int i = 0; i < filess.Length; i++) 
     { 
      RadioButton rb = new RadioButton(); 
      rb.Text = Path.GetFileNameWithoutExtension(filess[i].ToString()); 
      rb.Name = Path.GetFileName(filess[i].ToString()); 
      rb.CheckedChanged += new EventHandler(radioButton_Update); 
      Point lc = new Point(15, yPos); 
      rb.Location = lc; 
      panelSound.Controls.Add(rb); 
      lstbxCustomSounds.Items.Add(Path.GetFileNameWithoutExtension(rb.Text)); 

      yPos += 20; 
      //add into the arraylist 
      controlsCollections.Add(rb); 
     } 

Peut-être est-ce le problème? Parce que seul le son actuellement en cours de suppression causera ce problème?

private void wPlayer_PlayStateChange(int newstate) 
    { 

     if (newstate == 1)//Media finished 
     { 
      btnPlay.Text = "Play"; 
      wplayer.close(); 
      btnDelete.Enabled = true; 
      wplayer.URL = ""; 
     } 
     else if (newstate == 3) 
     { 
      btnDelete.Enabled = false; 
     } 
+0

Quelle est la question? –

+0

Est-ce que quelqu'un a plus de suggestions? – Daniel

Répondre

1

Il semble qu'une réponse facile à ce problème serait de ne pas permettre la suppression de quelque chose qui est actuellement en cours de lecture ... que ce soit ou faire en sorte que le processus de suppression est terminé avant de recharger la collection.

EDIT Sur la base de votre code ci-dessus, lorsque vous instancier le fileinfo qui est à supprimer, vous annexant Convert.ToString(filepath[i]) à la filepath du nouvel objet fileinfo. Au lieu de cela, je voudrais me débarrasser de tout avant cela et juste utiliser filepath[i].FullName. Je voudrais juste instancier l'objet à supprimer comme new FileInfo(filepath[i].FullName);.

+0

Alors, comment puis-je m'assurer que le processus de suppression est terminé avant de recharger la collection? J'ai essayé une boucle while (en vérifiant le répertoire pour le nom de fichier), il a pendu le programme pendant 5 secondes avant de recharger les collections. – Daniel

+0

Quand effectuez-vous la suppression? Est-ce sur un autre fil? Je dis mettre à jour la collection juste après l'instruction de suppression. Quelle que soit la durée de l'instruction delete, elle sera toujours mise à jour une fois la suppression terminée. – Aaron

+0

La suppression n'est pas dans un autre thread. Ma collection de rechargement fonctionne de cette façon, traverse le répertoire et trouve les fichiers dans le répertoire. Après avoir supprimé le fichier, j'appelle ma méthode de collecte de rechargement et, malheureusement, ils peuvent toujours trouver le fichier là. Je pensais que le fichier n'est pas encore complètement supprimé, c'est pourquoi il est encore capable de détecter ce fichier. – Daniel