我用VS2005 写WINFORM
用System.IO.Ports;
SerialPort _comPort = new SerialPort();来发串口数据
打开串口代码如下:
//设置串口参数
_comPort.BaudRate = 9600;
_comPort.DataBits = 8;
_comPort.StopBits = System.IO.Ports.StopBits.One;
_comPort.Parity = System.IO.Ports.Parity.None;
_comPort.PortName = "COM1";
_comPort.RtsEnable = true;
try
{
_comPort.Open();
}
catch (ArgumentException ex)
{
MessageBox.Show(ex.ToString());
}
-----------------
执行到
_comPort.Open();异常:
System.ArgumentException:给定的端口名称未以 COM/com 开头或未解析为有效的串行端口.
看这错误好象是说我的_comPort.PortName 值不是用COM开头定义而出错.
代码不变,我拿去其他电脑A(WIN XP SP3,系统和我电脑一样,同一张碟所装)上测试,可以打开COM1,无错.
代码我换成COM2,在本机可以成功打开,无错
-----------
但是拿去客户的服务器上却和我电脑一样报同样的错!所以必须解决.
客户电脑是WIN SERVER 2003 系统
我的是XP SP3,我测试的电脑A系统和我的一样,并且是同一张碟装的,机子配置也是一样!这个错误在网上根本搜不到,请教如何解决?谢谢

解决方案 »

  1.   

    对于串口通信,串口的参数配置,应该放在一个配置文件中(INI文件或XML文件)(这才是好的设计方式),每次运行时,从配置文件中获取参数再进行设置。你的代码没有错误,但你代码是要求所有的电脑的串口都应该是COM1,这显然是不对的,你出问题的电脑,一定是COM1有问题。因此,你应该把COM口名称,波特率,数据位,停止位,校验位等等全部放到配置文件中,根据不同的电脑来作设置(对于你的情况,可能只有COM口不一样)。可以从“设备管理器”的“端口”查询每台电脑可使用的串口名称。
      

  2.   

    COM的属性,我全部照着改了,我的机子还是会出错.
    我知道我自身机子问题,所以现在问一下有什么办法可以解决吗?
      

  3.   

    回3,4楼,我用COM1直接连打印机驱动,是可以打印的.
      

  4.   

    今天早上,我又在公司另外两台电脑上测试,他们的COM1属性直接没改,比如,比特率是115200,但因为我的程序里把他改成9600了.
    经过测试,在另外两台电脑上可以正常打开串口....
    如果实在不行我下午得重新还原系统看看了
      

  5.   

    COM口都是独享资源,谁优先打开占用,谁就独享,后面要使用的就不能再打开使用了。既然你可以通过COM1打印东西,应该说你的COM1口是好的,检查是否电脑一开机就被打印机打开使用了?
      

  6.   

    1、先确认你机子上是否有COM1串口。
    2、如果有COM1,下载一个串口调试工具,查看其状态,如果占用着,可以直接将其释放。
    3、上面的代码是有问题的,在调用_comPort.Open()之前,需要先查看其开启状态,如果被占用,调用close()方法将其关闭:
    if(_comPort.IsOpen)
    {
       _comPort.Close();
    }
      

  7.   

    结贴了也顶一下,我今天就遇到这样的问题了,我还奇怪那,以前用的好好的,这次就不行了,谁知道是Adobe打印机占用了COM1端口。