对不起,我希望你们为我调试,但我真的不知道出了什么问题...
所以这是无法正常工作的代码:
public static async Task SetPlaylist(ICollection<Music> playlist, Music music = null)
{
int index = 0;
if (CurrentPlaylist.Count > 0)
{
if (music == null)
{
CurrentPlaylist.Clear();
PlayBackList.Items.Clear();
}
else
{
Debug.WriteLine(music.Name);
foreach (var item in CurrentPlaylist.ToArray())
{
if (item.Equals(music)) index = 1;
else RemoveMusic(item);
}
Debug.WriteLine(new string('=', 20));
}
}
foreach (var item in playlist.Skip(index))
await AddMusic(item);
if (!CurrentPlaylist.Contains(CurrentMusic))
CurrentMusic = null;
}
此功能的作用是,它将重置播放列表,并且如果指定了音乐,请不要从播放列表中删除该音乐。当您仍在播放音乐时将音乐播放器设置为随机播放模式时,此功能很有用。它只会随机播放播放列表的其余部分,而不会中断当前播放列表。
问题是,如果我在第一个foreach
上设置了一个断点并逐步执行foreach
,那么它将完美地运行而没有任何错误。但是,如果我仍然在第一个foreach
中时按继续,则当前播放的音乐将停止并重新启动,这意味着当前播放的音乐可能会被删除并重新添加到播放列表中。
我不知道如何调试它。我只能猜测可能与async
有关。即使它的行为不符合预期,它也可以提供正确的输出。
我的源代码在这里:https://github.com/SeakyLuo/SMPlayer/blob/master/SMPlayer/Helpers/MediaHelper.cs。
我测试了您的代码,并在SetPlaylist(ICollection<Music> playlist, Music music = null)
方法中发现了问题,这可能是由于频繁执行[[remove