我正在尝试使用串行输出将它们写入实验的文本文件中,并使用串口命令连续触发设备。下面是我用来测试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输出?
答案 0 :(得分:1)
这是因为从后台线程调用DataReceived
事件处理程序。在 port_DataReceived
被调用之前,此帖子不会调用您的Console.WriteLine("bytes to read : {0}",port.BytesToRead);