关于SerialPort类,超级棘手的问题,在线等。估计是.net的大BUG了
我的串口是外设USB虚拟出来的,就是一插入这个设备,就会多出一个COM6口来,易做图后就会消失的那种。用SerialPort进行读写操作都没问题。
问题来了,就是当设备拔出后,软件会出错,无论进行异常怎么捕捉都无效,
先看下我的处理(我的程序是用C++描述的,和C#差不多的):
protected:virtual void WndProc( Message% m ) override
{
if (m.Msg == 0x0219)//接收到设备更新消息
if(m.WParam.ToInt32()==0x8000)//设备插入
{
}
else if(m.WParam.ToInt32()==0x8004)//设备拔出
{
if(this->serialPort1->IsOpen)//问题来了。问题一:拔出设备后,串口依然是打开的
{
try{this->serialPort1->Read(a,0,1);}//进行读操作,如果是本COM设备拔出的操作会出现异常
catch(UnauthorizedAccessException^ ex) //捕捉到异常
{
try{ this->serialPort1->Close();}//问题二:无法关闭端口,关闭的又会出现异常
//异常分两中情况,有的时候出现authorizedAccessException
//有的时候是ObjectDisposedException,我不知道如何处理同时处理2种异常
catch(UnauthorizedAccessException^ ex){}//进行关闭异常的处理
// catch(ObjectDisposedException^ ex){} // 问题三:为何有的时候是这种异常消息?
}
}
}
}
Form::WndProc( m );
}
请高手帮助解决下。 --------------------编程问答-------------------- 拨出设备后 端口都消失了 怎么还判断? --------------------编程问答-------------------- 你这个写的不好!!! 串口通讯最后最好要关闭 --------------------编程问答-------------------- 在收到设备拔出消息后, 直接用SerialPort.GetPortNames(),
判断serialPort1.PortName是否存在 --------------------编程问答-------------------- 占个楼做俯卧撑! --------------------编程问答-------------------- 不太明白帮你顶下吧 --------------------编程问答-------------------- 哦,你是用消息方式写的,我不太懂了.我每次读写端口前都是先判断端口是否正常再操作. 你收到设备插拔消息时有可能端口还没有模拟出来或还没有Dispose掉. --------------------编程问答--------------------
补充:.NET技术 , C#