当前位置: 首页 > 知识库问答 >
问题:

读取串行端口上的数据时UI冻结

奚昌胤
2023-03-14

我正在开发一个WPF应用程序,它将读取串行端口上的数据,对其进行解析,并将其显示在UI上。

我必须使用串行端口Buad速率-115200,数据位-8,停止位-1。

我在串行端口上每秒发送10000字节,将由我的WPF应用程序读取。

但是,在这里我面临的问题与用户界面。当我开始阅读COM端口我的UI冻结。它不允许任何人做任何事情。根据我的调查,这是由于数据的高速度。

  1. 我在不同的线程上读取com端口,UI在不同的线程上运行。
  2. 线程之间的数据传输使用公共循环缓冲区完成。
  3. 我确实使用了BecinInvoke方法来更新UI字段,以便函数立即返回。
  4. 在两个线程中访问循环缓冲区时,我确实使用了锁定机制

有没有办法处理这种情况?我读过很多人面临同样的问题。解决此类问题的解决方案是什么。

谢谢,Vishal N

共有1个答案

潘鸿文
2023-03-14

听起来好像您要么错误地设置了线程对象,要么太频繁地将反馈传递回UI。

如果您对直接使用Thread对象感到不舒服,那么BackgroundWorker类可能会帮助您。查看MSDN上的BackgroundWorker类页面。

 类似资料:
  • 问题内容: 我有一个Java程序,必须读取Arduino发送的信息。我从这里获取了Java代码。现在,我不太了解它是如何工作的,但是我尝试对其进行修改,并且得到了以下信息: 我创建一个对象串行COM口,我需要在主程序,然后我使用和当我需要它。 效果很好,Arduino获取数据并将其显示在LCD显示屏中。问题是。程序运行时,它会不断从串行端口读取数据(大约每40毫秒一次),但这并不意味着Arduin

  • 我试图做一些非常简单的东西,按钮计数器,有一个按钮在我的HTML-php当我点击它我发送数据'按'到我的arduino和它使led闪烁,到目前为止,还不错,但然后我想发送信号,当我在arduino中按下按钮,我想让我的php读取字符串"点击次数: N"的串行端口,N是从arduio的推送计数。 这里的问题是,在arduino串行我可以看到他字符串,一切正常,但在PHP我做

  • 问题内容: 我研究了许多有用的线程和一些教程,但是仍然存在一些问题,这些问题应该非常简单。作为参考,这里是我细读的一些线程: 无论如何,我有一个问题。如果我收到数据,我的代码可以正常工作。如果不这样做,则read()函数将停顿,退出程序的唯一方法是使用kill -9(注意:我使用信号处理来发信号通知线程读取串行数据以终止。这不是罪魁祸首,即使我删除了信号处理,read()调用仍然停止。我正在尝试做

  • 我有一个Velleman k8090中继板,我试图从中读取一些数据。我可以很好地写入电路板,但每当我输出读取的数据时,我都会得到奇怪的字符,比如菱形或倒置的问号。以下是我的部分代码: 为什么我会有这些奇怪的角色?文件规定它应该返回年份和星期。 编辑:经过一些搜索和故障排除,我现在非常确定它与Python代码或数据类型有关,而不是与硬件有关。这个论坛包含了一个C语言的例子,它从黑板上读取。我从黑板上

  • 我做了一个python程序,从串行端口读取gps数据。GPS冰球流NMEA数据语句连续插入USB时。我的程序打开端口,然后尝试读取数据,解析它,然后将其与从Arduino提取的其他数据一起写入文本文件。 我遇到的问题是,当我第一次运行程序时,有时它无法读取数据。我放入了一些Try/Exception捕获,发现以某种方式无法从GPS串行端口读取数据 如果我点击Cntrl-C几次,这似乎可以解决它遇到

  • 问题内容: 我以下列方式从打开的串行端口读取某些数据时遇到麻烦。我已经多次使用此代码实例,并且一切正常,但是现在,由于某种原因,我无法弄清楚,我完全无法从串行端口读取任何内容。 我能够写,并且在另一端正确接收了所有消息,但是从未收到答复(正确发送)(不,电缆都还好;)) 我用来打开串行端口的代码如下: 端口初始化后,我通过简单的write命令向其中写入一些内容。 hCom是文件描述符(没关系),并