C# 串口通信的問題。。。

wu345654 2009-03-27 10:36:42
手頭上有一個程序。form樣式是Mdi窗體的。。。在有幾個MDI子窗體裡面,使用了讀取com口的數據,com口連接了電子磅的。讀取數據這些一切都正常。

就是現在有個問題就是。我在點擊MDI子窗體右上角的那個關閉的那個xx符號的時候。我的程序就死掉了。只能通過結束進程來關閉程序。但是電子磅端口還是能正常關閉,唯獨就是我的程序卡死在那裡了。下面這個圖片。原版右上角的那個小xx不見了


這張是正常情況的效果:

http://ys-c.ys168.com/?QQ截图未命名.jpg_4s7bsl7d7ejs7bsl0cprooll0co5bsr5bi5bksll0cm7bu0u12f03za


原因就是在關閉電子磅的時候程序卡死了。我的程序上對電子磅端口都有釋放的。端口這些都有關閉代碼的。用的是serialPort這個控件。誰知道這個是怎么回事。我的關閉代碼如下。

int i = Environment.TickCount;
while (Environment.TickCount - i < 2000 && true) Application.DoEvents();
this.serialPort1.Close();//现在没有死锁了,关闭串口
this.Dispose();
單獨寫的一個方法,在子窗體的formclosing()函數中調用
...全文
241 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
dai78 2009-04-03
  • 打赏
  • 举报
回复
放控件,直接相应控件数据接收事件就可以阿
fly_to_sky 2009-03-27
  • 打赏
  • 举报
回复
用线程吧
灯火斑斓 2009-03-27
  • 打赏
  • 举报
回复
无法看到你上传的图片。
.NET 2.0后提供的SerialPort对于串口通信是非常稳定的。只谈我自己的经验:
(1).在SerialPort的DataReceived中读取正确的数据后,数据的处理应该放到一个单独的背景线程中去完成.
(2).在主窗口的FormClosing事件中,应该先检查并中止串口接收数据的处理线程,然后再关闭并释放串口资源.
51Crack 2009-03-27
  • 打赏
  • 举报
回复
while (Environment.TickCount - i < 2000 && true)
这还不死!
直接serialPort1.Close(),干嘛延时!
wu345654 2009-03-27
  • 打赏
  • 举报
回复
補上正常效果圖片,上面的發錯了
睡神在睡觉 2009-03-27
  • 打赏
  • 举报
回复
硬中断里没处理好吧,让数据堆积了
wu345654 2009-03-27
  • 打赏
  • 举报
回复
能請教一下樓上的代碼是怎么寫的嗎?我的是讀取電子磅的數據。
dai78 2009-03-27
  • 打赏
  • 举报
回复
我的怎么没有问题
wu345654 2009-03-27
  • 打赏
  • 举报
回复
不取數據就絕對不會死掉。取了數據就會死掉。。但是出現的幾率是10%左右,不知道什麽原因。
但是串口必須要有關閉事件的,不然下次就打不開了。提示,串口被占用。
xutao888 2009-03-27
  • 打赏
  • 举报
回复
干脆不写关闭代码了,.NET在程序关闭的时候会自动处理的
睡神在睡觉 2009-03-27
  • 打赏
  • 举报
回复
不取数据关闭直接关闭也死?
wu345654 2009-03-27
  • 打赏
  • 举报
回复

this.serialPort1.Close();//现在没有死锁了,关闭串口
this.Dispose();

但是我這樣寫也不行啊。還是老樣子。

程序卡死的圖片地址:http://ys-c.ys168.com/?未命名.bmp_4s7bsl7d7ejs7bsl0cprooll0co5bsr5bi5bks1bt0cn7b6z98f09f12za
正常的圖片地址:http://ys-c.ys168.com/?QQ截图未命名.jpg_4s7bsl7d7ejs7bsl0cprooll0co5bsr5bi5bksll0cm7bu0u12f03za
睡神在睡觉 2009-03-27
  • 打赏
  • 举报
回复
while (Environment.TickCount - i < 2000 && true) Application.DoEvents();
this.serialPort1.Close();//现在没有死锁了,关闭串口
this.Dispose();

这刷新这一下干什么?把串口堵死了吧?

111,126

社区成员

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

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

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