询问者
SerialPort类操作串口, 碰到了奇怪的错误

问题
全部回复
-
你好!
一般是这个端口被其他程序占用了,打开之前可以先判断一下状态:
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开头或未解析为有效的串行端口" 的异常.
再说, 如果是端口占用, 不会抛出这种异常的. -
做了一下串口的监控, 这里是监控的结果.
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#编译的程序.