当前位置:编程学习 > C#/ASP.NET >>

关于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#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,