串口:由于线程退出或应用程序请求,I/O 操作已中止

mngzilin 2010-05-28 08:58:06
虚拟串口com2向com1发送10个字节数据。屡次发生如下错误。不要try....catch{...}

上代码:

       private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
if (e.EventType == System.IO.Ports.SerialData.Eof) return;
byte[] b = new byte[20];
serialPort1.Read(b, 0, b.Length);//第二次进入异常
if (pictureBox1.InvokeRequired)
this.pictureBox1.BeginInvoke(new drawdel(draw), b);
else
draw(b);
}


错误:由于线程退出或应用程序请求,I/O 操作已中止。

异常现象,当serialPort1_DataReceived执行完成以后,它自动又执行了一次serialPort1_DataReceived,而且e.EventType 是chars,此时出现如上错误,为什么?

偶尔会出现一次全过程都无异常的现象,为什么?

不要告诉我加try....catch{...},我想知道错误的根本原因。谢谢~~~~
...全文
6715 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
nierenyi 2011-08-04
  • 打赏
  • 举报
回复
我想我的问题是开了两个线程,一步读取和同步读取
mngzilin 2010-05-28
  • 打赏
  • 举报
回复
我先慢慢消化你的文章,结贴,谢谢!~·
mngzilin 2010-05-28
  • 打赏
  • 举报
回复
谢谢楼上分享,正在看.....
兔子-顾问 2010-05-28
  • 打赏
  • 举报
回复
你读20个,如果串口缓存不足20个,不就出错了?
int tick = Environment.TickCount;
while(Environment.TickCount-tick<100 && serialPort1.BytesToRead<20) ;//死等吧
byte[] b = new byte[20];
serialPort1.Read(b, 0, 20);


这样不会异常了
否则你就按我第三篇的方法,缓存数据,判断数据完整后再分析。

111,132

社区成员

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

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

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