我有一个对象(音符)列表,在播放它们时在单独的线程上枚举。我这样做是为了让 UI 线程保持响应。
当一个音符正在播放时(作为枚举的一部分),我怎么能允许一个新的音符可能被添加到列表中(没有明显的集合修改例外)。
我知道我可以将列表复制到一个临时列表并枚举它,但我实际上希望列表随着用户选择的更多而增长(这将在播放第一个音符时发生等)。
伪逻辑原样:
onClick()
{
Queue.Add(theClickedNote)
Queue.Play() <-- on another thread
}
Play()
{
if(Playing==true){return ;}
foreach(note theNote in Queue)
{
Note.Play();
Queue.Remove(theNote);
}
}
正如您在上面看到的,每个 Click 事件都会向队列添加一个注释,然后调用队列上的播放方法。
队列枚举音符并在删除音符之前依次播放每个音符
我希望我已经清楚地解释了我想要做什么?