C#设置字节读取阈值

时间:2018-07-11 18:31:10

标签: c# serial-port

设置serialPort1.ReceivedBytesThreshold = 64;仅在触发接收字节事件时才生效。现在,我正在使用计时器和serialPort1.Read(temp, 0, bytestoread);。,并且没有在使用字节接收事件。设置接收字节阈值会对此产生影响。

private void timer1_Tick(object sender, EventArgs e) //creates a timer tick event to read everything in the port when the timer ticks
    {

        int bytestoread = 0;

        timer1.Stop();
        try
        {
            bytestoread = serialPort1.BytesToRead;
        }
        catch(InvalidOperationException ex)
        {
            //MessageBox.Show("Serial connection lost. Exception types:" + ex.ToString());
        }
        if (serialPort1.IsOpen)
        {
            if(bytestoread != 0)
            {
                byte[] temp = new byte[bytestoread];
                serialPort1.Read(temp, 0, bytestoread);
                if(firstRead && (temp[0] == 0xC0 && temp[1] == 0x04 && temp[2] == 0xC0))
                {
                    serialPort1.Write(packageToSend, 0, packageToSend.Length);
                }
                else
                {
                    tempBuffer.AddRange(temp);
                    firstRead = false;
                    btnIndicator.BackColor = Color.Green;
                }                    
            }
        }
        timer1.Start();
    }

1 个答案:

答案 0 :(得分:1)

查看您发布的代码,我看不到SerialPort.ReceivedBytesThreshold属性将如何影响您的代码。 Here是.NET库中的文档。它说它控制“ DataReceived事件发生之前内部输入缓冲区中的字节数”。默认值为1。由于您没有在发布的代码中处理DataReceived事件,因此更改此事件不会影响整体执行。

这种情况的用例是,如果您有一个用于该事件的事件处理程序,并且只希望在一定数量的字节可用时才触发它。