【问题标题】:Faster way to color format text in a RTB在 RTB 中为文本设置颜色格式的更快方法
【发布时间】:2013-06-15 19:44:48
【问题描述】:

我正在编写一个程序,从远程服务器读取日志到屏幕。

程序会在收到的每个新包裹的底部添加 1 行。

目前我正在使用 TextBox 来提高速度,因为我每分钟收到大约 600-2200 个包裹,而 RTB 根本跟不上。

当lines[]超过300行时,我删除最上面的一行,以减少内存使用,并降低速度。

问题是我真的希望线条颜色格式化,因此更容易看到它输出的内容,因为流对大多数人眼来说太快了。

据我所知,RTB 中只有 Select 方法可以为文本着色,但我想知道,如果有任何组件更好用,那么标准 RTB,更可靠,然后是 RTB ?

【问题讨论】:

  • 没有人可以每秒阅读 37 条消息,它看起来就像一个模糊。试图让它更快是没有意义的,它只会更模糊,更不可用。创建一个实用的用户界面,你的实时出价问题也会消失。
  • 你可能是对的.. 我一直懒得看需要新的 GUI。主要问题是......我正在从中读取远程日志的协议,有过去 1000 个不同的包,我只识别并成功地解析了其中的 60 个......其余的被原始字节读取到 ascii 阅读器。我目前使用文本框的主要原因是让我了解程序对数据的处理方式,以及我应该如何继续阅读它们。但是我应该开始将它们写入文件日志

标签: vb.net colors richtextbox


【解决方案1】:

我认为最好的解决方案是有一个中间缓冲区(队列)来存储从包中收集的信息。

Dim _buffer as New List(Of String)

当一个新包到达时,将它添加到缓冲区的末尾:

_buffer.Add("package contents")

然后您可以使用计时器每半秒读取一次缓冲区的内容并为文本框着色。

Private Event Timer_Tick 
    Do Until _buffer.Count = 0
        rtb.Text += _buffer(0)
        'colourise the textbox
        _buffer.RemoveAt(0)
    Loop
End Sub

您可能会在单独的线程上读取和写入缓冲区时遇到问题,在这种情况下您可以尝试使用 SyncLock 但这可能会让您暂时停止

【讨论】:

  • 这个以及使用suspendlayout和resumelayout的方法可能很方便:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-18
  • 1970-01-01
  • 1970-01-01
  • 2017-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多