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

C# 串口read()函数的不同输出,c#,serial-port,C#,Serial Port,我试图使用串口的输出将它们写入文本文件进行实验,并使用串口命令连续触发设备。下面是我用来测试read()函数的示例代码,这些函数的工作方式各不相同,我无法理解原因 我希望能够使用bytestoread属性来检查串行中的任何输出,以便写入我的文本文件 class Program { static void Main(string[] args) { byte[] buffer = new byte[2048]; SerialPort port =

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

我希望能够使用bytestoread属性来检查串行中的任何输出,以便写入我的文本文件

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 返回值形式。读取函数:1 199.0,+238.0091


有人能帮我理解为什么port.bytestoread返回0,而必须返回计数的port.Read()只返回一个,而readTo()函数返回actaul输出吗?

这是因为从后台线程调用了
DataReceived
事件处理程序。在
Console.WriteLine(“要读取的字节:{0}”,port.BytesToRead)之后,此线程才会调用您的
port\u DataReceived
,是因为从后台线程调用了DataReceived事件处理程序。在
Console.WriteLine(“要读取的字节:{0}”,port.BytesToRead)之后,此线程才会调用您的
port\u DataReceived
中吗?您想如何使用它?它告诉您在调用BytesToRead时有多少字节可供读取,如果您调用它而没有字节可读取,它将为零。。。如果您只想显示如何读取我的字节,那么是的,将其放入事件处理程序。我尝试将其放入事件处理程序,结果显示有17个字节要读取。我想我可以接受。谢谢。好的,有17个字节要读。。。这是个问题吗?同样,数据是异步接收的。这意味着在调用BytesToRead和调用Read之间,可以接收数据——这意味着BytesToRead所说的内容可能与实际读取的内容不同。在这种情况下,我如何使用BytesToRead属性?我应该将bytestoRead放在eventhandler>中吗?您想如何使用它?它告诉您在调用BytesToRead时有多少字节可供读取,如果您调用它而没有字节可读取,它将为零。。。如果您只想显示如何读取我的字节,那么是的,将其放入事件处理程序。我尝试将其放入事件处理程序,结果显示有17个字节要读取。我想我可以接受。谢谢。好的,有17个字节要读。。。这是个问题吗?同样,数据是异步接收的。这意味着在调用BytesToRead和调用Read之间,可以接收数据——这意味着BytesToRead所说的内容可能与实际读取的内容不同。