Richtextbox显示冻结系统

时间:2010-05-06 20:31:56

标签: c# richtextbox

我有一个.net2 / c#应用程序。它从套接字接收数据,格式化并显示在richtextbox控件中。通信发生在一个单独的线程中。接收的数据被添加到显示功能提取的队列中。相当一些重型格式化完成 - 排序,着色等。显示功能在主线程中。我观察到的是当有大量数据显示整个计算机死机时。用于中止显示的工具栏按钮或ALT-TAB切换到另一个应用程序的工具按钮也不起作用。我设法在应用程序顶部打开任务管理器,CPU消耗仅为25%左右(任务管理器本身似乎运行缓慢)。关于可能导致这种情况的任何想法?提前谢谢。

2 个答案:

答案 0 :(得分:1)

格式化数据的显示功能我认为它会使数据出列。这是在一个单独的线程上完成的吗?如果你没有这样做,你可能会考虑这样做 你在什么时候实际设置了richtextbox中的文本? 请记住,在多线程环境中,任何在UI上运行的操作都需要在UI线程上完成(InvokeRequired)

答案 1 :(得分:0)

将日志数据直接输出到GUI是一个很大的错误。

1)。 您应该将一个线程中的日志数据写入中间缓冲区(例如ArrayList),并在GUI线程中设置一个计时器,如果有要写入的内容,则每秒检查一次。显然,无论您在何处访问它,都必须lock {}中间缓冲区。

2)。 此外,RTF控制本身存在严重问题。它在.NET框架中表现最差。

我写了一篇文章如何使RichTextBox在这里加快120倍: C# RichEditBox has extremely slow performance (4 minutes loading) SOLVED