2010-02-22 113 views
2

我的應用程序執行此操作,使用wmplib播放選定的聲音,當statechangeevent = 1(媒體播放器停止)時,我將使用close()命令關閉播放器並將URL設置爲「」;Fileinfo刪除命令

現在每次我試着刪除一個正在播放的聲音,實際上它會被刪除,因爲當我查看目錄時,該文件已被刪除。每次刪除一個文件後,我都會重新加載這些控件,這些控件將被列爲目錄中的媒體文件。但是,它仍然會找到目錄中已被刪除的聲音。

我試過這種方式,調試很慢,而且我發現文件信息delete()命令需要較長時間才能刪除,因爲關閉媒體播放器需要較長的時間才能刪除,這就是爲什麼每當刪除當前播放的歌曲後,我嘗試重新加載收藏,刪除的歌曲仍然存在。 當我嘗試刪除媒體播放器不播放歌曲時,它會快速刪除,並且重新加載收藏集確實會顯示歌曲消失的結果。

問題是,如何刪除當前正在播放的文件,確保重新加載的集合在目錄中顯示正確的歌曲數量?

任何幫助將不勝感激。

我的代碼如下。

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); 
     } 

也許這是問題?因爲只有正在播放的聲音被刪除會導致這個問題?

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

問題是什麼? – 2010-02-22 15:30:21

+0

有沒有人有任何建議? – Daniel

回答

1

這似乎是一個簡單的答案,這個問題將不會允許當前正在播放的東西刪除...要麼或保證刪除過程是重裝前集合完畢。

編輯基於關閉您的代碼上面,當你實例化的FileInfo將被刪除,要追加Convert.ToString(filepath[i])新FileInfo對象的文件路徑。相反,我會擺脫之前的一切,只使用filepath[i].FullName

所以我只是將要刪除的對象實例化爲new FileInfo(filepath[i].FullName);

+0

那麼如何確保在重新加載集合之前完成刪除過程?我嘗試了一個while循環(檢查目錄中的文件名),它在重新加載集合之前將程序掛起了5秒鐘。 – Daniel

+0

你什麼時候執行刪除?它是否在另一個線程上?我說在delete語句之後更新集合。無論刪除語句花費多長時間,刪除完成後仍會更新。 – Aaron

+0

刪除不在另一個線程中。我的重裝集合以這種方式工作,遍歷目錄並找到目錄中的文件。刪除文件後,我會調用我的重新收集方法,但遺憾的是,他們仍然可以在那裏找到文件。我在想這個文件還沒有被完全刪除,這就是爲什麼它仍然能夠檢測到這個文件。 – Daniel