【问题标题】:UI freezes while reading data on serial port在串行端口上读取数据时 UI 冻结
【发布时间】:2013-08-05 09:11:13
【问题描述】:

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

我必须使用串口 Buad rate - 115200,数据位 - 8,停止位 - 1。

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

但是,我在这里遇到了 UI 问题。当我开始读取 COM 端口时,我的 UI 冻结了。它不允许任何人做任何事情。根据我的调查,这是由于数据的高速。

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

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

谢谢, 维沙尔 N

【问题讨论】:

  • 请出示一些代码。
  • 你确定你在不同的线程上吗?您的端口读取完成了吗?请发布一些代码。
  • 第 3 步是问题所在,您这样做太频繁了。 UI 跟不上。只是少做很多,你只需要让人们的眼睛忙碌。他们看不到任何更新速度超过每秒 20 次的东西。缓冲接收到的数据,直到获得完整的响应。并尽量减少您在 UI 上转储的信息量。

标签: wpf serial-port


【解决方案1】:

听起来您要么错误地设置了 Thread 对象,要么过于频繁地将反馈传递回 UI。

如果您不习惯直接使用 Thread 对象,那么 BackgroundWorker 类可能会对您有所帮助。查看 MSDN 上的 BackgroundWorker Class 页面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 2011-06-14
    • 1970-01-01
    相关资源
    最近更新 更多