none
SerialPort类操作串口, 碰到了奇怪的错误 RRS feed

  • 问题

  • 笔记本上没有物理串口,但是有两个蓝牙虚拟串口. 结果用串口调试工具打开没有问题, 可是用SerialPort.Open()却老是提示"给定的端口名称未以COM/com开头或未解析为有效的串行端口". 莫名其妙, 测试代码如下:

      System.IO.Ports.SerialPort sp = new System.IO.Ports.SerialPort("COM3");
      sp.Open();
      sp.Close();

    COM3即为蓝牙虚拟串口,用串口调试工具打开没问题.

    错误莫名其妙, 还请大侠帮忙啊!!

    2009年11月19日 18:14

全部回复

  • 你好!
         一般是这个端口被其他程序占用了,打开之前可以先判断一下状态:
    if(sp.IsOpen)
    {
      ...
    }
    周雪峰
    2009年11月20日 4:57
    版主
  • 你好!
         一般是这个端口被其他程序占用了,打开之前可以先判断一下状态:
    if(sp.IsOpen)
    {
      ...
    }
    周雪峰


    谢谢.

    可以肯定是不会有别的程序占用端口的. 针对这一点我专门中断在Open失败的catch处, 然后打开串口调试助手, 打开COM3, 调试助手一点问题没有.
    如下代码:

    System.IO.Ports.SerialPort sp = new System.IO.Ports.SerialPort("COM3");
    if (!sp.IsOpen)
    {
    	sp.Open();
    	sp.Close();
    }
    

    依然在sp.Open()处抛出 "给定的端口名称未以COM/com开头或未解析为有效的串行端口" 的异常.

    再说, 如果是端口占用, 不会抛出这种异常的.

    2009年11月20日 5:09
  • 做了一下串口的监控, 这里是监控的结果.


    SUDT ACCESSPORT LOG FILE - Monitor mode

    监控: COM3
    创建时间: 2009-11-20, 13:29:33
    计算机名: SMALLNEW
    系统版本: Professional  (Build 7600)

    #       Time        Function                        Data ( Hex ) 

    1       [00000000]  IRP_MJ_CREATE                   Port Opened - Terminal.exe
    2       [00000000]  IOCTL_SERIAL_SET_BAUD_RATE      Baud Rate: 4800
    3       [00000000]  IOCTL_SERIAL_SET_LINE_CONTROL   StopBits: 1, Parity: No, DataBits: 8
    4       [00000720]  IRP_MJ_WRITE                    Length: 0001, Data: 61
    5       [00000738]  IRP_MJ_WRITE                    Length: 0001, Data: 61
    6       [00000749]  IRP_MJ_WRITE                    Length: 0001, Data: 61
    7       [00002047]  IRP_MJ_CLOSE                    Port Closed
    8       [00000000]  IRP_MJ_CREATE                   Port Opened - output.exe
    9       [00000003]  IRP_MJ_CLOSE                    Port Closed


    第一次open 是 Terminal.exe程序, 第二次是c#编译的程序.

    2009年11月20日 5:33