c # richtextbox outofmeory - PullRequest
       23

c # richtextbox outofmeory

2 голосов
/ 10 января 2011

Я написал приложение, которое читает входящий чат (что-то вроде мессенджера), форматирует его и вставляет в richtextbox.Если вы оставите программу работающей достаточно долго, вы получите ошибку нехватки памяти.Посмотрев на мой код, я думаю, что это потому, что я никогда не урезаю richtextbox.Проблема, с которой я сталкиваюсь, заключается в том, что я не хочу вызывать clear (), потому что я не хочу, чтобы видимый текст исчезал.Я думал, может быть, я должен сохранить список с максимальным размером чего-то вроде 200 строк.Этот список будет хранить самый последний чат.Если журнал чата становится большим, позвоните, очистите и вставьте последние 200 строк.Однако, прежде чем реализовать эту мысль, я хотел бы спросить, знает ли кто-нибудь о лучшем решении.Есть мысли?

Ответы [ 2 ]

3 голосов
/ 10 января 2011

Я бы, вероятно, сделал следующее:

  1. Перехват события RichTextBox.TextChanged
  2. В обработчике проверьте количество строк (RichTextBox.Lines.Length)
  3. Если это превышает ваш максимум, удалите первое.

Удачи!

0 голосов
/ 21 октября 2016

Хотя я согласен с принятым ответом, я хотел предоставить пример кода, чтобы показать некоторые пояснения:

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 () после удаления текста, в противном случае первая строка текстастановится пустым пространством, из-за чего это не работает.

...