串口的read()函数的不同输出

时间:2012-08-01 15:11:38

标签: c# serial-port

我正在尝试使用串行输出将它们写入实验的文本文件中,并使用串口命令连续触发设备。下面是我用来测试read()函数的示例代码,这些函数的工作方式各不相同,我无法理解为什么。

我希望能够使用bytestoread prperty来保持对串口中任何输出的检查以写入我的文本文件。

class Program
{
    static void Main(string[] args)
    {

        byte[] buffer = new byte[2048];
        SerialPort port = new SerialPort("COM4", 9600, Parity.None, 8, StopBits.One);
        port.Open();
        port.DtrEnable = true;
        port.RtsEnable = true;
        port.NewLine = "\r";
        port.Handshake = Handshake.RequestToSend;
        if (port.IsOpen) { Console.WriteLine("port is now open"); } else { Console.WriteLine("port not opened correctly"); }
        port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
        port.Write("T");
        Console.WriteLine("bytes to read : {0}",port.BytesToRead);
        Console.WriteLine("return value form .read function : {0}",port.Read(buffer,0,20));
        Console.ReadLine();
    }

    static void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        SerialPort sp = (SerialPort)sender;
        Console.WriteLine(sp.ReadTo("\r"));

    }

}

输出

端口现已打开 要读取的字节数:0 返回值表单.read函数:1 199.0,+ 238.0,091

有人可以帮我理解为什么port.bytestoread返回0并且必须返回count的port.Read()只返回一个但是readTo()functiosn返回actaul输出?

1 个答案:

答案 0 :(得分:1)

这是因为从后台线程调用DataReceived事件处理程序。在 port_DataReceived被调用之前,此帖子不会调用您的Console.WriteLine("bytes to read : {0}",port.BytesToRead);