LINQ而不是wpf中的for循环?

时间:2016-02-16 06:18:37

标签: c# wpf performance linq richtextbox

我正在使用WPF RichTextbox。我必须得到RichTextbox中的所有行。所以我使用for循环来获取所有行,但RichTextbox包含大文本内容。这需要太多时间。

那么如何在更短的时间内绕过1000线循环呢?

我已尝试过parallel.for,但在尝试获取RichTextbox文字的每一行时都会出现异常。

这是我的代码。

   for (Int32 icnt = 0; icnt <= iLineCount; icnt++)
   {
     LineDetails lnDtls = new LineDetails();
     lnDtls.LineText = GetLineText(txtAppendValue.CaretPosition.GetLineStartPosition(icnt));
     iCurrentEnd = iCurrentEnd + lnDtls.LineText.Length;
     lnDtls.LineLength = iCurrentEnd;
     listLines.Add(lnDtls);
   }  

GetLineText():

   String GetLineText(TextPointer TextPointer)
   {
       tp1 = TextPointer.GetLineStartPosition(0);
       if (tp1 == null)
       {
         return null;
       }
       else
       {
         tpNextLine2 = tp1.GetLineStartPosition(1);
         if (tr != null)
         {
           tr = null;
         }
         if (tpNextLine2 == null)
         {
           tpNextLine2 = txtAppendValue.Document.ContentEnd;
         }
         tr = new TextRange(tp1, tpNextLine2);
         return tr.Text;
       }
   }

那么我可以使用LINQ代替for循环来快速执行吗?

1 个答案:

答案 0 :(得分:1)

我不明白为什么需要这么复杂。一些简单的代码行将为您提供富文本框中的所有行。

        string text = new TextRange(richTextBox.Document.ContentStart, richTextBox.Document.ContentEnd).Text;
        text.Replace("\r\n", "\n");
        var lines = text.Split(new char[] {'\n'});