Serialport DataRecieved 线程在执行前结束

Posted

技术标签:

【中文标题】Serialport DataRecieved 线程在执行前结束【英文标题】:Serialport DataRecieved threads ending before execution 【发布时间】:2018-04-27 22:02:11 【问题描述】:

我注意到,当从串行端口启动新线程时收到数据事件,如果执行计划仅包含一些可能会更改某些值并在另一个端口上发送的方法,那么它可以正常工作,但是如果该方法需要进行更广泛的处理,例如在另一个端口上发送并等待 ACK,再次发送并在 256 字节数据包中接收相当大的数据量(20KB),然后线程就停止在某个地方并且永远不会完成。当代码单步执行时,它似乎工作正常。我已经阅读了人们询问此问题的其他主题,但没有“解决方案”只是使用另一种方法(如计时器)来轮询端口。我什至通过让主线程“轮询”一个从事件更改的变量而不是让事件完成工作来解决这个问题,这似乎可行,但是当使用 Windows 窗体时,我必须创建一个似乎做同样的事情,要么不完成代码,要么不执行新线程,这只是一段时间的运行,永远运行检查变量。如果需要,我可以提供代码只是想了解如何正确解决这个问题。

【问题讨论】:

你的文字墙有点混乱。您能否说明您正在尝试完成什么,您目前正在尝试做什么来完成它的一个愚蠢的高级示例,以及您得到的意外结果是什么? 我一直使用 C# 串口,它有一些众所周知的限制,但大多数情况下它非常简单,我运行各种协议传输 100Kbs 的数据。 我想知道接收数据的线程会受到哪些限制,以及为什么它们在执行多种其他方法时会死掉。我可以给出一个代码示例,但我需要知道您喜欢看到,因为应用程序非常大。基本上在接收到某个字节数组后会调用大约 4 或 5 个方法,然后继续执行诸如发回 ACK、将字节中继到另一个端口、等待 ACK、从相机请求图像、将图像移动到另一个端口并发送包那个图像。它似乎永远不会完成,但当我跨过它时它会完成。 【参考方案1】:

这里没有人知道问题的答案或解释了限制,但我能够使用计时器运行 while 循环检查变量更改并启动执行相同操作的线程来解决问题。

【讨论】:

以上是关于Serialport DataRecieved 线程在执行前结束的主要内容,如果未能解决你的问题,请参考以下文章

查找串口-ObjectQuery("SELECT * FROM Win32_SerialPort")

linux下的qt串口通信

SerialPort.h SerialPort.cpp

串口通信属性及事件解析

C#的SerialPort串口程序设计总结

winform串口控件serialPort1的使用