串口关闭问题!

foxd 2013-01-10 12:13:51
我们编写的软件要接收232串口传来的数据并实时地显示在屏幕上,退出窗体时需要关闭串口(SerialPort)。由于微软提供的SerialPort控件有Bug,直接使用SerialPort.Close(); 来关闭串口是不行的。我以前编写的小点儿的c# winform程序是使用以下的过程来关闭串口,如:
private void closeWeighPort()
{
try
{
int i = Environment.TickCount;
while (Environment.TickCount - i < 1000 && _isReceiving) Application.DoEvents();
serialPort.Close();
}
catch (Exception ex)
{
throw;
}
}

其中的_isReceiving是窗体变量,当串口接收数据时就置为true。以前这么用都没有什么问题,这回我在编写一个稍大点儿的c# winform程序时就出现有时能关闭串口有时无法关闭,造成假死的死机现象。难道以上代码不够完善?或者您是否有更为好用的关闭串口的过程代码可借我参考。谢谢了!
...全文
231 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
fujiao520 2013-01-16
  • 打赏
  • 举报
回复
楼主如何优化的呀?我也碰到这种问题,
foxd 2013-01-11
  • 打赏
  • 举报
回复
又稍微优化了一下代码,现在基本不死机了。谢谢各位指教!
siyo 2013-01-10
  • 打赏
  • 举报
回复
没听说serialport有这个问题啊? 是不是Environment.TickCount溢出了?程序假死的时候看看程序停在那个位置上?
strife013 2013-01-10
  • 打赏
  • 举报
回复
.net的串口类不太好用,我以前做过在c#里面直接调用win32的串口类,用起来比较好用
bdmh 2013-01-10
  • 打赏
  • 举报
回复
那可能是 while (Environment.TickCount - i < 1000 && _isReceiving) 条件退不出来
知擎物联 2013-01-10
  • 打赏
  • 举报
回复
捕捉窗体关闭事件,在关闭前设置_isReceiving设置为false。 程序退出时,serialPort不需要手动去关闭。会自动释放。

110,536

社区成员

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

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

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