c# 串口操作相关问题求教

listenlong 2016-04-25 01:20:48
//单开线程进行:串口读数据 并添加添加到队列sqdata
while(true){
Thread.sleep(30);
byte[] RecieveData = new byte[sp.BytesToRead];
sp.Read(RecieveData, 0, RecieveData.Length); //串口读数据
int lenth = RecieveData.Length;
if (lenth >= 160)
{
// recvdata.AddRange(RecieveData);
lock (sqdata)
{
sqdata.Enqueue(RecieveData);
}
}
}

另开一线程 间隔30ms 进行如下操作,
byte[] ttemp = null;
lock (sqdata)
{
t1 = sqdata.Count;
if (t1 > 0)
{
ttemp = sqdata.Dequeue();
}
}
sqata是队列:串口循环读的数并添加到队列, 为什么 我单步 ttemp数组 就有数,一直接运行,ttemp数组就一直没数 。
直接运行,ttemp一直没有数据
...全文
251 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
listenlong 2016-04-29
  • 打赏
  • 举报
回复
引用 16 楼 s1ihome 的回复:
[quote=引用 12 楼 mjp1234airen4385 的回复:] 串口组件是有个数据接收的事件的,在这个事件里接收数据,而不是想这样子,先让线程休眠,再读取数据。 估计数据在你休眠期间,都传输完了,等你读取的时候,哪还能读取到数据。
我也觉得是如此[/quote] 另一端一直在接收数据,根本不是这个问题,还有如果没有数据的话,我断点调试 怎么会看到数据,程序运行后几秒钟,打的断点。。。
listenlong 2016-04-27
  • 打赏
  • 举报
回复
引用 9 楼 knf 的回复:
ttemp的线程被阻塞了
输出来是都是0,一打断点,运行就不是0了。
listenlong 2016-04-27
  • 打赏
  • 举报
回复
引用 8 楼 DOwnstairs 的回复:
以为楼主是要序列化,结果进来看了下貌似是物理通讯
不是物理,单步走就可以看到里面有数据。
listenlong 2016-04-27
  • 打赏
  • 举报
回复
引用 7 楼 oysy 的回复:
串口,C#有控件serialport ,可以用事件来读取数据,你为何要定时去读?
因为 我还有其他的判断 没贴出来, 不同种 模式接收数据,这个是以160字节解析,另外还有其他 只有单个字节的。
lccleo 2016-04-27
  • 打赏
  • 举报
回复
我觉得根本问题是你的 lock的问题 尝试两个 1.删除lock关键字 2. sleep的时间 都延长一点 看看有没有反应
mjp1234airen4385 2016-04-27
  • 打赏
  • 举报
回复
串口组件是有个数据接收的事件的,在这个事件里接收数据,而不是想这样子,先让线程休眠,再读取数据。 估计数据在你休眠期间,都传输完了,等你读取的时候,哪还能读取到数据。
  • 打赏
  • 举报
回复
引用 12 楼 mjp1234airen4385 的回复:
串口组件是有个数据接收的事件的,在这个事件里接收数据,而不是想这样子,先让线程休眠,再读取数据。 估计数据在你休眠期间,都传输完了,等你读取的时候,哪还能读取到数据。
我也觉得是如此
秋的红果实 2016-04-26
  • 打赏
  • 举报
回复
如果接收端长度小于160,sqdata自然是没有元素,跟串口发送的数据有关
yangyugw 2016-04-26
  • 打赏
  • 举报
回复
多线程推荐是用堆栈Stack来操作 你的问题分析2点 1、串口有无数据,打断点看看 2、第二个线程是否执行赋值,看之前还判断了下count,这个count是不是总是0啊
knf 2016-04-26
  • 打赏
  • 举报
回复
ttemp的线程被阻塞了
SoulRed 2016-04-26
  • 打赏
  • 举报
回复
以为楼主是要序列化,结果进来看了下貌似是物理通讯
飞天凤凰601 2016-04-26
  • 打赏
  • 举报
回复
串口,C#有控件serialport ,可以用事件来读取数据,你为何要定时去读?
listenlong 2016-04-26
  • 打赏
  • 举报
回复
11111111111111111111111111111111111111111111111111111111
listenlong 2016-04-26
  • 打赏
  • 举报
回复
111111111111111111111111111111111111111111111111111111111111111111111111111111
listenlong 2016-04-25
  • 打赏
  • 举报
回复
3q,感觉就像没人一样!
木子迁 2016-04-25
  • 打赏
  • 举报
回复
我也是小白,帮你顶一下……
listenlong 2016-04-25
  • 打赏
  • 举报
回复
顶起来。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
listenlong 2016-04-25
  • 打赏
  • 举报
回复
有没有人啊,自顶一下!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

110,536

社区成员

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

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

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