我有一个.net2/c#应用程序。它从套接字接收数据,格式化并显示在richtextbox控件中。沟通发生在一个单独的线程中。接收到的数据被添加到显示功能提取的队列中。相当一些重型格式化完成 - 排序,着色等。显示功能在主线程中。我观察到的是,当有大量数据显示整个计算机冻结时。用于中止显示的工具栏按钮或者ALT-TAB切换到另一个应用程序的工具栏也不起作用。我设法打开应用程序顶部的任务管理器,并且CPU消耗仅为25%左右(任务管理器本身似乎运行缓慢)。任何想法可能会造成这种情况?提前致谢。Richtextbox显示屏冻结系统
0
A
回答
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
相关问题
- 1. 如何验证RichTextBox中的大文本而不冻结屏幕?
- 2. Windows窗体冻结显示()
- 3. Gmail冻结显示:无
- 4. WPF临时显示冻结
- 5. 如何冻结屏幕?
- 6. 冻结屏幕方向
- 7. 显示一个RichTextBox
- 8. 画中画冻结不显示包
- 9. JSON显示文本 - 冻结UI
- 10. 显示在android系统
- 11. 显示在android系统
- 12. 显示系统日期
- 13. 显示在android系统
- 14. 显示在android系统
- 15. 如何在WatchOS2中显示系统加载屏幕?
- 16. 进展9.1e + DataDirect的4.10冻结整个系统
- 17. 冻结每个操作系统的python脚本
- 18. 当我开始ADB,系统完全冻结
- 19. 如何研究课题以“冻结”的windows系统
- 20. 为什么堆溢出“允许”冻结系统?
- 21. 当我的系统冻结时收到通知
- 22. 无法退出(系统冻结)当远程登录SSH时
- 23. 在FreeBSD下的c/C++下复制大文件冻结系统
- 24. Visual Studio 2013:启动调试器时全系统冻结
- 25. 开放系统设置冻结Ubuntu上的机器17.10
- 26. 如何使用jqgrid冻结列来显示不同的屏幕宽度?
- 27. 如何在浏览器中显示弹出窗口时冻结屏幕?
- 28. 如何显示加载屏幕统一?
- 29. RichTextBox中不显示图像
- 30. Laravel显示关系结果