SerialPort写操作不会触发缓冲区中的任何BytesToRead

时间:2019-02-22 19:56:11

标签: c# serial-port

我正在将一个序列写到串行端口,告诉它向我发送数据。发送序列并尝试从串行端口读取数据后,那里什么也没有。但是,如果我关闭程序并在超级终端中打开端口,则数据会立即显示,而无需进行提示。

private string ReadSerialPort()
    {
       var _comPort = new SerialPort()
       {
            PortName = "COM2",
            BaudRate = 1200,
            DataBits = 7,
            Parity = System.IO.Ports.Parity.Odd,
            StopBits = System.IO.Ports.StopBits.One,
            NewLine = Environment.NewLine,
            WriteTimeout = 500,
            ReadTimeout = 500,
            Handshake = System.IO.Ports.Handshake.None
        };

        if (!_comPort.IsOpen)
        {
            _comPort.Open();
        }

        int unicode = 27;
        char character = (char)unicode;
        string text = character + "P";

        _comPort.WriteLine(text);

        //System.Threading.Thread.Sleep(200); // Didn't help

        string serialData = string.Empty;
        while (serialData.Length == 0)
        {
            serialData = _comPort.ReadLine();
        }

        return serialData;
    }

如果我将转义序列写到串行端口3次,我的代码中什么也看不到,但是如果打开超级终端,它将出现3次。

是什么导致代码在缓冲区中看不到任何东西,但是一旦退出程序就可以看到它?

1 个答案:

答案 0 :(得分:0)

我的解决方案是设置DtrEnable = true。现在一切都按预期工作了!
This question帮助我找到了解决方案

SerialPort.DtrEnable Property