小编CWM*_*Man的帖子

.Net中的高容量,高速文本框

我正在编写一个应用程序,它将以高达250kb /秒的速率显示串行/ USB数据.我正在使用.net SerialPort类并对事件做出反应.对于该软件的早期实现,我只是将传入的数据存储在WinForms中.此解决方案正常工作,直到控件中有50k - 100k行,此时应用程序陷入困境.从那以后,我尝试用WPF完成我的目标,并发现了同样的问题.我曾尝试过只保留文本框中当前可见的文本,并将其余文本存储在一个文本DataReceivedRichTextBoxList<string>但是这个解决方案需要大量的解决方法,并且最终被放弃了 - 我宁愿不重新发明轮子.

现在我来找你一个希望的线索 - 我愿意尝试任何事情!我应该使用自定义控件(欢迎付费和免费控制)?SQLite虚拟化如上所述?我应该尝试轮询SerialPort而不是对事件做出反应吗?

.net c# windows textbox serial-port

5
推荐指数
1
解决办法
739
查看次数

慢速 WPF 文本框

我正在开发一个简单的串行数据查看器,它将用于观察传输到计算机串行端口之一的数据。我使用 C# 和 WPF 编写了一个测试应用程序;它只是将最近读取的行放入文本块中。但是,它会跳过所有其他行。我的理论是,在 WPF 渲染窗口之前,新数据会被放入文本块中。然而,我已经尝试了我能想到的所有线程优先级组合,并且应用程序最多显示每隔一行;最坏的情况是每 20 行显示一次。

我正在多核计算机上运行。我的应用程序由一个文本块和一个用于打开/关闭端口的按钮组成。(我尝试用文本框替换文本块,并且我观察到同样的问题)

我的DataReceived处理程序:

private void MainWindow_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
    string message = sp.ReadLine();
    if (string.IsNullOrWhiteSpace(message))
        return;

    this.Dispatcher.BeginInvoke(DispatcherPriority.Send, (ThreadStart)delegate()
    {
        text.Text = message;
        this.InvalidateVisual();
    });
}
Run Code Online (Sandbox Code Playgroud)

该应用程序的最高优先级是处理大量数据的持续吞吐量;WPF 适合这种情况吗?如果是的话,我做错了什么?

c# wpf textbox serial-port

3
推荐指数
1
解决办法
5065
查看次数

标签 统计

c# ×2

serial-port ×2

textbox ×2

.net ×1

windows ×1

wpf ×1