日期:2014-05-19  浏览次数:20743 次

SerialPort的问题
在写串口通信的东西,拿我的COM1做实验,在ReadLine的时候程序就block了,我知道这个函数一直在轮询数据,读不到数据就一直Block。那是不是我的write没有把数据写到串口上?          
                static   void   Main(string[]   args)
                {
                        SerialPort   port   =   new   SerialPort();

                        port.BaudRate   =   4800;

                        port.Parity   =   Parity.None;

                        port.DataBits   =   8;

                        port.StopBits   =   StopBits.One;

                        port.PortName   =   "COM1 ";

                        port.Open();

                        port.WriteLine( "test ");

                        Console.WriteLine(port.ReadLine());
                }

------解决方案--------------------
我自己没做过Serial Port,但凭直觉 port.WriteLine( "test ")是向外发的,是发给外节设备的,不是发给自己的; 而port.ReadLine是读进来,也就是说收外来设备发给你的数据,这和你用port.WriteLine发出去的数据是不同的东西.

------解决方案--------------------
COM1上没有接设备你想从serial port的inbuffer中读什么?!WriteLine和ReadLine作用的硬件区域是不一样的,一个是outbuffer一个是inbuffer。认真看看这个http://msdn2.microsoft.com/zh-cn/library/system.io.ports.serialport.readline(vs.80).aspx
设置ReadTimeout和WirteTimeout可以改善你的程序