如何将输出限制为最新记录

本文关键字:最新 新记录 输出 | 更新日期: 2023-09-27 18:02:52

概念性问题:我在后台有一个服务,它不时向我输出一些对象,所以我想在GUI中向用户显示输出。我应该使用哪个控件?列表视图,因为每处理一个项目一行就可以了,还是文本框输出?

我应该把服务中的对象放在哪里?在排队?但我怎么能很容易地将其绑定到控件,使最古老的得到删除(FIFO)?有什么好主意吗?

如何将输出限制为最新记录

我只是添加了我的解决方案,效果很好:

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";