Мое приложение делает это, воспроизводит выбранный звук с помощью wmplib, и после statechangeevent = 1 (медиапроигрыватель остановлен) я закрою проигрыватель с помощью команды close () и установив URL-адрес на "";
Теперь каждый раз, когда я пытался удалить звук, который воспроизводится в данный момент, на самом деле он будет удален, потому что, когда я посмотрел каталог, файл был удален. Каждый раз, когда я удаляю файл, я перезагружаю элементы управления, в которых будет указан файл мультимедиа в каталоге. Однако он все равно найдет звук, который уже был удален в каталоге.
Я пробовал этот способ, медленно отлаживая, и я обнаружил, что удаление команды File info 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;
}