我在使用串口的时候出现了两个错误,基本上还属于有几率才能触发,第一个是已关闭Safe handle”的错误,第二个是由于线程退出或应用程序请求,已中止 I/O 操作。

造成第一个错误的原因是在关闭串口前就关闭了线程,这样就会出现这样的错误。

不过经过在网上的查找资料发现,先关闭串口后关闭进程会出现第二种错误。

发生的原因应该就是串口关闭的时机的问题。在这里纠结了半天,每次点击停止监听串口都会将整个程序退出。

于是经过尝试发现,可以先将线程挂起,然后在关闭串口,再关闭线程,安装这样的顺序不会出现错误,可能会有个小提示而已。

try
            {
                if (TRecieve.IsAlive)
                {
                    TRecieve.Suspend();
                }
                if (_serialPort != null)
                {
                    if (_serialPort.IsOpen == true)
                    {
                        _serialPort.Close();
                    }
                }
                if (TRecieve != null)
                {
                    TRecieve.Abort();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

这就是源代码


posted on 2013-05-10 14:52  月神苍龙  阅读(757)  评论(0编辑  收藏  举报