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

跪求SerialPort调用时如果串口被拔出的解决方法
现在的软件用的是SerialPort控件,外接的是USB转RS232进行通行;

但是问题是:如果我在通行的时候人为把串口拔掉,那么就会出现错误,软件将强行关闭不能恢复,可以理解成某种意义上的崩溃

所以在这里小弟我请教大家,怎么才能在通行的时候,人为把串口拔掉,不会导致软件崩溃呢?


我试过网上的一种方法:用Windows的消息函数来判断是否串口拔出;

这种方法的试验结果是:如果串口拔出的那一瞬间正好没有通信,那么软件将不会崩溃,跳出一个我预先写好的对话框,为正确;
但是一旦拔出串口的那一瞬间正好在通信(比如comm.read或者comm.write),正好卡在这个语句上的话,上面的哪个消息函数就一点用都没有了;
包括在while循环、for循环里面的所有串口操作,如果拔出的那一刻正在循环,那么上面的消息函数也一样没用,软件还是会崩溃!


所以! 我的问题是,怎样才能做到一个全面的防止串口被拔出的情况下软件不会崩溃的方法(包括没有通信、正在单次通行、正在while或者for循环通信等等情况!)

请高手指教了!

小弟我谢谢了

------解决方案--------------------
try catch 和if(comm.Isopen)不一样吧.
在读写操作的中间拔掉usb串口当然会引起异常,如何处理异常是根据你的软件需求来定的,可简单可复杂.
写程序不要怕麻烦.
------解决方案--------------------
手里没有U转串 无法测试
猜想在读写的时候拔掉设备是可以捕捉到异常的 用try catch处理
而拔掉之后关闭串口 是无法捕捉异常的 这时用Windows的消息函数来判断是否串口拔出
------解决方案--------------------
串口被拔出后,一个错误处理,即可
------解决方案--------------------
无聊的楼主
你难道不能把你那串口读写封装到一个类里面
你处处那样写自己觉得都累
还不愿意去catch错误
不要老以为catch不好
存在就有他的用处