2010-05-06 55 views
0

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

回答

1

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

0

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

1) 你应该在一个线程中日志数据写入到中间缓冲器(例如一个ArrayList),并在GUI线程设置是否存在将要写入的东西,检查一次的第二定时器。很明显,无论您访问哪个中间缓冲区,都必须使用lock {}

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

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