概念问题: 我在后台有一个服务,不时输出一些对象,所以我想在GUI中向用户显示输出。我应该使用哪种控制? Listview,因为每个处理的项目一行可以正常,或者文本框输出?
我应该在哪里保留服务中的对象?在队列中?但是我怎样才能轻松地将它绑定到控件上,以便最早删除(FIFO)?任何优雅的想法如何最好地实现这个?
答案 0 :(得分:0)
我只是添加了一个很好用的解决方案:
public class SlidingBuffer<T> : IEnumerable<T>
{
private readonly Queue<T> _queue;
public int QueueMax { get; private set; }
public SlidingBuffer(int maxCount)
{
QueueMax = maxCount;
_queue = new Queue<T>(maxCount);
}
public void Add(T item)
{
if (_queue.Count >= QueueMax)
{
_queue.Dequeue();
}
_queue.Enqueue(item);
}
public IEnumerator<T> GetEnumerator()
{
return _queue.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
带有项目的课程
public class SlidingItem
{
public SlidingItem(string text, int number)
{
Text = text;
Number = number;
TimeStamp = DateTime.Now;
Id = ++ItemsProcessed;
}
private static int _itemsProcessed;
public int ItemsProcessed
{
get { return _itemsProcessed; }
set { _itemsProcessed = value; }
}
public int Id { get; set; }
public string Text { get; set; }
public int Number { get; set; }
public DateTime TimeStamp { get; set; }
public string ShowMembers()
{
return string.Format("{0}\t{1}\t{2}\t{3}", TimeStamp.ToString("G", CultureInfo.CurrentCulture), Number, Text, Id);
}
public override string ToString()
{
return ShowMembers();
}
}
最后绑定到ListBox:
BindingSource bindingSource = new BindingSource();
bindingSource.DataSource = _controller.SlidingBuffer;
listBoxOutput.DataSource = bindingSource;
listBoxOutput.DisplayMember = "ShowMembers";