2010-04-13 94 views
1

是否有一种在RichTextBox控件中实现FIFO的简单方法?RichTextBox中的FIFO机制

其实我有一个测试工具可以在一分钟内生成超过1000行,这就是为什么我想限制总数行数以及何时在控制中添加最后一行应该被删除的新行数。

+0

知道什么时候开始删除行是问题。使用Lines.Count太昂贵。但是,如果您可以保证只添加一条线,这变得很容易。我们需要这样的简化来给你一个很好的答案,并在你的问题中记录它们。 – 2010-04-13 10:46:14

回答

0

今天我遇到了Infinite-Scroll design pattern。我认为这可能会有所帮助。

OLD答:

List<string> lines = new List<string>(); 

int max = 2; 

int n = 0; 

private void button1_Click(object sender, EventArgs e) 
{ 
    lines.Insert(0,n.ToString()); 

    richTextBox1.Text = string.Join("\n", lines.Take(max).ToArray<string>()); 

    n++; 
} 

这是非常简单的FIFO。同样在List<string> l你将有记录在所有的时间:)

+0

:(这并不是那么简单,有很多格式化的场景,我必须让它们在每个条目上,这将是性能因素,请考虑最大值= 10,000 – 2010-04-13 09:14:12

+0

它会减慢处理速度,因为有多少线程正在写入日志,而您知道UI对象只能从UI线程访问:( – 2010-04-15 10:57:05

0

不是你的问题的答案,但你读了1000分钟的所有信息? 有没有一种方法(或者已经是)只记录来自'级别'的消息。从Java 报价:

* SEVERE (highest value) 
* WARNING 
* INFO 
* CONFIG 
* FINE 
* FINER 
* FINEST (lowest value) 

例如: 通常你会具有:消息1(调试)和消息2(重度) 前缀根据其电平每行:

  • 1:消息1
  • 7:消息2

现在您可以修改您的测试工具以仅记录某个级别。 7个日志全部,1个日志只有1个等 结果是少了不必要的日志和可读的输出(例如2个消息应该出现在彼此之后,但由于线程在记录之间有20条消息...)