我正在试图弄清楚要使用的数据类型......基本上我想要一个线程安全的FIFO队列,并且一旦达到预先指定的限制就会自动抛出足够多的数据.
嗯,实际上,也许更多的是列表,因为我不希望整个概念推入队列并从队列中弹出一个项目,此时它已不再可用.
用例基本上是一个播放列表,我最多有5个即将到来的项目,当前正在播放的项目,然后是大约20个已播放的项目.因此,为什么我猜它不能是一个队列,我将访问中间的一个项目作为"当前"项目.当列表变得很大时,我宁愿不必手动管理丢弃旧物品......显然我可以自己写这些,但如果C#已经存在,我不想重新发明轮子.
我能用什么的想法?
在框架中,有一些东西几乎具有您想要的功能 - ConcurrentQueue. 它是线程安全的队列,大多数操作都是无锁实现的,因此速度非常快。
唯一没有的功能是“限制”和自动“扔掉”......
但这可以很容易地添加 - 只需创建您自己的包含私有的类ConcurrentQueue,并通过出队/扔掉在您的公共入队方法中实现“扔掉部分”,直到在将新元素入队之前满足您的限制。
编辑 - 根据评论:
一种选择是使第二个“队列”成为ObservableCollection- 尽管本质上不是线程安全的(注意),但这很容易在 WPF 中绑定...
另一种方法是让你的类相应地实现ObservableCollection接口(由 组成IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable, INotifyCollectionChanged, INotifyPropertyChanged) - 这听起来很多,但是大多数这些你可以通过中继到内部轻松实现ConcurrentQueue,所以没有太多实际代码需要编写......
请参阅http:// /msdn.microsoft.com/en-us/library/ms752347.aspx