日期:2014-05-17  浏览次数:20948 次

串口关闭问题!
我们编写的软件要接收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程序时就出现有时能关闭串口有时无法关闭,造成假死的死机现象。难道以上代码不够完善?或者您是否有更为好用的关闭串口的过程代码可借我参考。谢谢了!

------解决方案--------------------
那可能是 while (Environment.TickCount - i < 1000 && _isReceiving) 条件退不出来
------解决方案--------------------
.net的串口类不太好用,我以前做过在c#里面直接调用win32的串口类,用起来比较好用
------解决方案--------------------
没听说serialport有这个问题啊?
是不是Environment.TickCount溢出了?程序假死的时候看看程序停在那个位置上?
------解决方案--------------------
捕捉窗体关闭事件,在关闭前设置_isReceiving设置为false。
程序退出时,serialPort不需要手动去关闭。会自动释放。