c# SerialPort类串口通讯的问题

acer123321 2008-12-12 01:32:35
出串口接收数据后用Socket传输到网络服务器上,
用Open()方法打开后,我用Close()关闭串口,
反复三次后,程序调试到Close()方法时,在DataReceived事件中抛出异常,
"线程退出或者是应用程序请求,无法进行IO操作"

我感觉可能是Close后,DataReceived事件中还有数据没有操作,但是我不知道如何处理好?
请各位大侠给些意见,很急啊。
...全文
168 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
acer123321 2008-12-12
  • 打赏
  • 举报
回复
谢谢大家,已经解决了,我用BackgroundWorker处理SerialPort的DataReceived的事件,关闭串口的时候应该判断一下BackgroundWorker的isBusy属性,如果true的话,就Thread.Sleep(100);处理完DataReceived中的数据,然后在关闭。
wangping_li 2008-12-12
  • 打赏
  • 举报
回复
Abort()一下呢?
socket.Close();
mythread.Abort( );

acer123321 2008-12-12
  • 打赏
  • 举报
回复
我不是已接收就关闭,我是有打开串口和关闭串口的操作。
不可能关闭串口都等着关闭才窗体或者终端吧?
我感觉.NET中肯定会有相应的操作。
heyu1000 2008-12-12
  • 打赏
  • 举报
回复
“我感觉可能是Close后,DataReceived事件中还有数据没有操作,但是我不知道如何处理好? "
应该是这个问题啦,
并且个人觉得你没必要每次取了数据之后就关闭串口的,你可以封装一个类,将SerialPort封装到里面,或者直接继承也可以,做一个单件模式,这样的话,一开始的时候打开,应用程序关闭的时候才关闭串口,不要老是取打开关闭,
并且.NET里面,你关闭串口的时候,也未必真的就马上关闭了,因为垃圾回收是需要时间的,既然你用了DataReceived事件,那么说明你的串口随时都可以有数据进来的。
JustLovePro 2008-12-12
  • 打赏
  • 举报
回复
up
关注~
同样遇到此问题

110,534

社区成员

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

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

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