请教SeraiPort 运行一段时间后就不接收数据了是怎么回事呢

周盖文 2010-09-14 02:42:19

SeraiPort 运行一段时间后就不接收数据了是怎么回事呢?
用一台机子一直发送数据,另外一台开着机子一直接收, 但开始启动程序时可以接收到,10多分钟后就不接收了,当断点在sp_DataReceived里面时又可以接收,断点去掉后再运行(F5)又不接收了,不知道是什么问题?

另外一个问题,(接收端)通过 USB 转串口线接上无线模块能接收到数据,用C# Serialport控件读到的数据正常,但是发送不了数据,但通过 通过 USB 转串口线 接上 rs232 转 rs485 模块 再接上无线模块能够相互发送数据,但是C# Serialport控件接收到的数据是乱码,但是通过串口调试软件接收到的数据正常
接收的代码
private void sp_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{

userInfo += sp.ReadExisting();
while (userInfo.Length >= 30 && userInfo.IndexOf("end") > 0 & userInfo.IndexOf("start") > -1)//有起始符,也有结束符
{
//处理数据
System.Threading.Thread.Sleep(100);
}
}

大家有遇到这样的情况吗,怎么解决呢,谢谢了!
...全文
87 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
周盖文 2010-09-14
  • 打赏
  • 举报
回复
因为我断点在while上面有响应,里面也有响应,按F5后数据又正常了,过一会就不接收了,不知何故~

另外乱码也是很头痛,一样的程序,A机器发到B正常,B发到A收到就是乱码。
兔子-顾问 2010-09-14
  • 打赏
  • 举报
回复
你不接受数据的时候,按暂停。看看停在哪里了。你确定你的while中有break么?
周盖文 2010-09-14
  • 打赏
  • 举报
回复
谢谢上面的回复,还是没有解决
不会进入死循环的,我在里面对 userInfo 进行了处理
private void sp_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
//可以断点在这里的,这里断点时能执行到
userInfo += sp.ReadExisting();
while (userInfo.Length >= 30 && userInfo.IndexOf("end") > 0 & userInfo.IndexOf("start") > -1)//有起始符,也有结束符
{
//处理数据,这里会对userInfo 进行处理,
System.Threading.Thread.Sleep(100);
}
}
gongsun 2010-09-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyazhe 的回复:]
应该是这个while死循环了。
[/Quote]

System.Threading.Thread.Sleep(1000);
wuyq11 2010-09-14
  • 打赏
  • 举报
回复
检查资源消耗情况
兔子-顾问 2010-09-14
  • 打赏
  • 举报
回复
死循环往往要有个超时的,比如

int tick = Environment.TickCount;
while (userInfo.Length >= 30 &&
userInfo.IndexOf("end") > 0 & userInfo.IndexOf("start") > -1 &&//有起始符,也有结束符
Environment.TickCount - tick < 500)//500毫秒内死循环
{
//处理数据
System.Threading.Thread.Sleep(100);

}
兔子-顾问 2010-09-14
  • 打赏
  • 举报
回复
应该是这个while死循环了。

110,566

社区成员

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

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

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