再生時に別のスレッドに列挙されるオブジェクト(音符)のリストがあります。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イベントはキューにメモを追加してから、キューでplayメソッドを呼び出します。
キューはノートを列挙し、ノートを削除する前に各ノートを順番に再生します
私がやろうとしていることを明確に説明できたと思いますか?