我编写了一个代码来计算富文本框内容的行数和文本长度。对于小块文本,它可以完美地工作。但是当我在富文本框中按"输入"或"退格"时,当有大量文本(超过 100k(时,响应时间变得非常慢。例如:https://i.imgur.com/QO2UrAw.gifv
我的问题。异步运行此代码的更好方法是什么?
使用测试项目 https://gofile.io/?c=LpF409 存档
private void StatusPanelTextInfo()
{
int currentColumn = 0;
int currentLine = 0;
int linesCount = 0;
if (statusStrip1.Visible)
{
currentColumn = 1 + richTextBox1.SelectionStart - richTextBox1.GetFirstCharIndexOfCurrentLine();
RichTextBox rtb = new RichTextBox
{
WordWrap = false,
Text = richTextBox1.Text
};
currentLine = 1 + rtb.GetLineFromCharIndex(richTextBox1.SelectionStart);
linesCount = richTextBox1.Lines.Count();
if (linesCount == 0)
{
linesCount = 1;
}
}
toolStripStatusLabel1.Text = "Length: " + richTextBox1.TextLength;
toolStripStatusLabel2.Text = "Lines: " + linesCount;
toolStripStatusLabel3.Text = "Ln: " + currentLine;
toolStripStatusLabel4.Text = "Col: " + currentColumn;
}
我下载了您的代码,但我不明白为什么每次调用该方法时都要创建一个新的 RichTextBoxStatusPanelTextInfo
:
RichTextBox rtb = new RichTextBox
{
WordWrap = false,
Text = richTextBox1.Text
};
这就是您的程序出现如此滞后的原因。每次更改/选择文本时,都会创建一个新的 RichTextBox 对象,并将大量文本复制到其 Text 属性。您应该删除此代码,然后它的工作速度足够快。只需将currentLine
计算中的rtb
替换为richTextBox1
即可。
下次请在您的问题中提供您的代码,而不是让人们从外部链接下载它。你的整个表格课大约有60行。通过正确的选择,您可以使用20行向我们提供所需的所有信息。