SerialPort ,高速收发数据一段时间后,不在响应DataReceived事件 public CommPort() { Com = new SerialPort(); sftpCommandFilePath = ConfigurationManager.AppSettings["sftpCommandFilePath"]; dal = new tsomvDAL(); } /// <summary> /// 串口打开事件 /// </summary> /// <returns></returns> public bool CommOpen(string port, string baudrate) { try { Com.PortName = port; Com.Parity = Parity.None; Com.BaudRate = 2400; //端口默认2400 Com.ReceivedBytesThreshold = 1; Com.Open(); Com.DataReceived += new SerialDataReceivedEventHandler(Com_DataReceived); return true; } catch (Exception ex) { LogHelper.LogError(string.Format("打开串口出错:{0}",ex.Message)); return false; } } /// <summary> /// 串口接受事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Com_DataReceived(object sender, SerialDataReceivedEventArgs e) { LogHelper.LogInfo(string.Format("{0}:进入DataReceived,Closing is {1}", Com.PortName, Closing.ToString())); } 这是最后一次进入事件打印的日志 2014-11-24 15:25:50 Info COM7:进入DataReceived,Closing is False |
|
看看能不能捕捉到什么异常??没有显示的Close()掉SerialPort应该不会因为高速收发数据而自动Close的吧。
坐等高手解答 |
|
什么控件有SerialPort属性啊!
|
|
求解答~~~~~~
|
|
DataReceived事件在辅助线程引发,有没有做UI界面操作?
停止时间出现有规律还是随机? 波特位、停止位什么设置一致吗? |
|
10分 |
有可能是发送端有问题呢?
建议先缩小范围: 1、你用你的上位软件发送数据,com口另一端接上 串口助手,设置自动回复 看看是否正常。 先排除其他问题 |
你既然记录了日志 ,就应该定位问题出在哪,2014-11-24 15:25:51 Info COM7:退出DataReceived |
|
加上RECIVED 之后清缓存试下
|
|
你记录的这些都没有用
正常的数据,你爱直接显示还是存数据库,都行,这样一条条记到文件里没有意义 反而是程序出错的时候,错误信息你没有记录 |
|
20分 |
如果你仅仅是想知道到底什么时候没有数据了
可以做个全局int变量,在DataReceived里让它++,在timer里判断几秒都不变化了,就记录一下 文件里存了那么多无用的东西,有用的反而找不到在哪里 |
谢谢大家的回答,不是串口的问题
开始我还以为是串口的问题,以为那个地方参数没设对,照着msdn的例子写了下初始化 有测试还是不行。 今天才发现是用Renci.SshNet第三方库有问题,用的一个老版本,在sftp的服务端假死的情况下,这个库connect就会一直卡住了,我每隔半个小时会连接下sftp服务器,这样开了1天,他自己开启了很多子线程,导致程序里面除了主线程别的子线程都无法执行的情况。 我去Renci.SshNet官网上下了个最新版的 就解决了这个问题 |
|
Renci.SshNet,这个ftp上传
|