2011-01-10 84 views
2

我已经编写了一个读取传入聊天(有点像即时通讯工具)的应用程序,对其进行格式化并将其插入到richtextbox中。如果你让程序运行时间足够长,你会得到一个内存不足的错误。在看我的代码后,我认为这是因为我从不修剪RichTextBox。我遇到的问题是我不想调用clear(),因为我不希望可见文本消失。我在想也许我应该保留一个像200行一样大小的列表。此列表将保留最近的聊天。如果聊天记录变大,请呼叫清除并重新插入最后200行。然而,在我实施这个想法之前,我会问有没有人知道更好的解决方案。有什么想法吗?c#richtextbox outofmemory

+0

MaxLength属性可能是最接近设置任何东西来使控件管理字符串。但是,这可能是一个糟糕的选择。所以,基本上,自己管理它看起来是最好的方式。 – doobop 2011-01-10 01:30:31

+0

真的吗?你只是为了聊天而耗尽内存?你的用户以兆字节发送聊天吗?! – Mehrdad 2011-01-10 08:24:03

回答

3

我可能会做到以下几点:

  1. 赶上RichTextBox.TextChanged事件
  2. 在处理程序中,检查线(RichTextBox.Lines.Length
  3. 数量若超过您最大,删除第一。

祝你好运!

0

虽然我接受的答案同意,我想提供一个代码示例显示出一些澄清:

private void rtbChatWindow_TextChanged(object sender, EventArgs e) 
{ 
    int maxLines = 200; 

    if (rtbChatWindow.Lines.Length > maxLines) 
    { 
     string s = rtbChatWindow.Lines.First(); 
     rtbChatWindow.Text = rtbChatWindow.Text.Remove(0, s.Length).Trim(); 
    } 
} 

确保您在调用TRIM()删除文本,否则文本的第一行成为导致这不起作用的空白空间。