【问题标题】:How can I append the incoming strings of a serial port to a text box?如何将串行端口的传入字符串附加到文本框?
【发布时间】:2011-05-23 17:22:44
【问题描述】:

我是一个 c# 敏锐的初学者,我的第一个项目是串行端口的终端应用程序。传入的数据是 ascii 字符,它们带有 115 kbaud。

现在我想将每个传入行绑定到一个 wpf 文本框。在我的串行端口类中,我使用 IPropertyChanged 事件,并且成功地将每个传入行绑定到文本框。但是仅仅看到一行并不令人满意,文本框的内容应该附加到每一行。我不想在我的串行端口类中收集字符串,然后在每个新字符串中再次发送它们。我试过了,结果很慢。

接下来我尝试使用绑定事件 TargetUpdated 来使用 textbox.AppendText(incomingline) ...

<TextBox 
Name="textBoxIncoming" 
Text="{Binding Path=Incoming, Mode=OneWay, NotifyOnTargetUpdated=True}" 
DataContext="{Binding NotifyOnTargetUpdated=True}"
IsReadOnly="True"
TargetUpdated="textBoxIncoming_TargetUpdated" 
... />`

结果是每个传入的行在文本框中显示两次,之前的行被清除。

有谁知道,如何使用 wpf 绑定将文本附加到文本框?

【问题讨论】:

    标签: c# xaml binding serial-port


    【解决方案1】:

    这不能仅通过绑定来完成。相反,创建一个列表,在其中添加您收到的所有行。修改 Incoming 属性返回 string.Join(Environment.NewLine, listOfReceivedStrings)。

    【讨论】:

    • 我认为将所有先前的行(比如 100 行)与新的传入行一起更新会降低性能。几乎每毫秒都会有新行出现。现在我尝试了一个自定义事件 LineReceived 将文本附加到文本框。但这给我带来了跨线程的麻烦。所以我用每个新行调用 wpf 调度程序 BeginInvoke 以将该行附加到文本框。但这也很慢。
    • 您的解决方案是正确的,基本上是您使用 TextBox 可以获得的最快的解决方案。文本框不会包含大量文本。您的下一步是尝试使用列表(附加项目)或执行自定义绘图代码。
    猜你喜欢
    • 2014-02-25
    • 2020-10-04
    • 1970-01-01
    • 2021-09-06
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    相关资源
    最近更新 更多