2010-04-13 63 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條消息...)