【问题标题】:processing large text in C#在 C# 中处理大文本
【发布时间】:2011-11-11 14:29:08
【问题描述】:

我从 RichTextBox 收到 15.000 行(可能更多),我需要为每一行添加一些值。 这样做的最佳方法是什么,以免程序锁定?

目前,我正在处理作为线程运行的循环中的行:

 public void Process()
        {

               string[] lines;
                string line;
                string foo = " baa";
                if (richTextBox1.InvokeRequired)
                {

                    lines = (string[])Invoke((ReadLines)delegate
                    {
                        return /* read .Lines[] from richTextBox1 */
                    });
                    int max = lines.Length;

                    for (int i = 0; i < max; i++)
                    {
                        line = lines[i];
                        if (..)
                        {
                            lines[i] += "foo";
                        }
                    }

                    Invoke((Update)delegate
                    {
                        /* set new lines to RichTextBox1 */ 
                    });

              } 
       }

然后:

Thread th1 = new Thread(Process);
 th1.Start();

但它仍然锁定。最好的方法是什么? 提前致谢。

【问题讨论】:

  • 不幸的是,这就是野兽的本性 - 富文本框控件不打算容纳那么多行,分配将锁定 UI。我会认为“重新设计”而不是“解决方法”
  • 是的。在添加之前进行预处理,但最后 - 文本 bos 不是为此而制作的,请获取商业/校对编辑器组件。

标签: c# .net richtextbox text-processing


【解决方案1】:

【讨论】:

  • -1。鉴于更新可能已经在单独的线程中发生(可以在调用中看到),因此不太可能处理该问题。后台工作人员不会处理文本框所需的极长更新时间。在此期间,用户界面仍会锁定。
【解决方案2】:

抱歉,您最好不要使用文本框,而是使用专为部分更新和处理大量文本而设计的编辑器组件(例如 SyntaxEdit)。 UI 不会由于您的处理而锁定,而是因为文本框在处理大文本时效率低下,并且文本框在更新时会阻塞 UI 线程。不重写它是行不通的。你比它的规格大 14.900 行,可以这么说。每次更新框中的文本时,都会开始一个非常缓慢的重绘周期。一个你不能中断的,所以所有线程都无济于事 - 因为在这个更新周期结束之前 UI 是不负责任的。

“真正的文本编辑器”还有其他组件也可以处理更大的文本。

【讨论】:

  • 没有其他使用 RichTextBox 的解决方案吗?这是因为我需要突出显示一些文字..
  • 检查 SyntaxEdit - 商业,花钱,为程序员提供的编辑器组件(突出显示等)并且能够处理大型文件。
【解决方案3】:

BackgroundWorker 中运行并显示一些进展可能是您最好的选择(如果您必须使用 RichTextBox)。即使是那些旋转的 AJAX 图像之一可能就足够了。

【讨论】:

  • -1。指示很好,但它无法处理海报特别要求的问题(UI 锁定)。
猜你喜欢
  • 1970-01-01
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-16
  • 1970-01-01
相关资源
最近更新 更多