继续串口通信问题?

pfworld 2009-12-21 07:51:16
因为在主界面要使用3个以上的SerialPort,而且大部分接受连续发送数据的设备,再加上用远程视频,所以系统资源消耗比较大,容易造成UI卡死,寻求多线程解决方案!

以前使用自定义控件做了一个显示SerialPort数据的LED屏,后来发现容易卡死,因此显示和读取分开写,读取SerialPort数据后放进缓冲区内,然后使用线程更新LED显示控件,不知道这样行得通?或者大家有什么好的方案请帮忙!(回帖有分)
...全文
365 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
lijianfan 2010-06-08
  • 打赏
  • 举报
回复
兄弟!!!我最近也在搞那个,,,可我一点头绪也没有。。。要显示汉字好像要调用字库HZK16 ..能否将你的源代码给我看看。。。QQ550304122 搞了好多天了。。。希望你能帮我。。。
TANGLIJUNASP 2010-03-25
  • 打赏
  • 举报
回复
版主,把源码提供出来,参考一下,我也在做类似项目
有同感,方便的话发我邮箱也可以,tljchina001@163.com
pfworld 2010-01-14
  • 打赏
  • 举报
回复
up!
yccwt 2010-01-06
  • 打赏
  • 举报
回复
嗯,将UI和数据处理分开
chenglidexiaoxue 2010-01-06
  • 打赏
  • 举报
回复
直接使用API最好,可以更自由一些,资源消耗也少些,我在WINCE下测试过serialport这个串口封装类,长时间的接收数据,内存使用量会一直增加,当然会有个峰值,之后不再增加,但相当一部分的内存使用是释放不掉的,这和.NET垃圾处理机制是有关系的,除非你把serialport对象CLOSE掉才可以释放内存。
建议楼主在后台用一个固定的线程在一个合适的间隔时间内去读取3个串口的缓冲区,这样好控制,不要用serialPort1_DataReceived,这个触发一次就是抛出一个线程,多个线程都去争抢CPU当然容易卡死。
当然后台刷新UI也要有排队机制,最好加个LOCK,等上个数据包更新UI后,Sleep下,下个数据包再刷
yilaozhuang 2010-01-06
  • 打赏
  • 举报
回复
到底用MSCOMM好呢,还是serialport好呢?或者MFC呢
redlei 2010-01-04
  • 打赏
  • 举报
回复
UP一下
pfworld 2010-01-04
  • 打赏
  • 举报
回复
寻求帮助!!
zhoudan3986226 2010-01-03
  • 打赏
  • 举报
回复
我也写过一个无线串口接收数据的 还好啊 你吧接收和显示的写开就行了
pfworld 2010-01-03
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 freeboy827 的回复:]
1毫秒刷一次啊,有这个必要吗
[/Quote]

测试!这个是用来降低系统性能的!极限测试!
freeboy827 2010-01-02
  • 打赏
  • 举报
回复
1毫秒刷一次啊,有这个必要吗
pfworld 2010-01-02
  • 打赏
  • 举报
回复
元旦自己顶!!
wzrj2008 2009-12-30
  • 打赏
  • 举报
回复
顶 一下
pfworld 2009-12-28
  • 打赏
  • 举报
回复
晕,自己UP一下!!
pfworld 2009-12-25
  • 打赏
  • 举报
回复
如何把控件运行在非UI线程中?比如说:串口、Timer、datagridview等!
ld6886 2009-12-25
  • 打赏
  • 举报
回复
根据楼主的描述是将数据的处理放在UI中了,所以才有低波特率下的问题。

将数据处理放到另一个线程中(或另几个线程中,根据具体的情况决定),不要在UI中放任何数据处理的代码。

这是UI的基本要求。
mjp1234airen4385 2009-12-25
  • 打赏
  • 举报
回复
自定义控件也是在主线程里跑的。
除非你放在子线程里定义才行的。
最好是用多线程。
pfworld 2009-12-25
  • 打赏
  • 举报
回复
解决方案1:在serialPort1_DataReceived内读取数据,分析数据后赋值到变量,然后传值到自定义控件LED显示数值,用户取值时直接读取变量值。

解决方案2:在serialPort1_DataReceived内读取数据,使用Timer每1/100秒读取serialPort1_DataReceived数据,分析数据后赋值到变量,然后传值到自定义控件LED显示数值,用户取值时直接读取变量值。


问题:使用解决方案1 UI有时有点卡,使用解决方案2时 数据不能同步!
michaelnami 2009-12-24
  • 打赏
  • 举报
回复
就用线程就好 但是注意屏幕不要实时显示 这样及其容易卡死
wutb2001 2009-12-24
  • 打赏
  • 举报
回复
帮顶
加载更多回复(12)

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧