SerialPort.ReadTo在执行Step时获取数据,但在正常执行时无法获取

时间:2019-05-03 21:02:08

标签: c# wpf serial-port

我正在构建一个必须通过串行端口进行通信的WPF应用程序。当我向串口发送一些数据时,它应该以一些数据进行回复。例如,我发送一个PIG \ r \ n并以ACK \ r \ n答复。在正常执行代码期间,我发送命令从连接到第二个设备的第二个设备(连接到我的串行端口)获取一些数据,但没有收到任何答复,只是超时异常。但是,当我尝试调试代码(使用逐步方法)时,它可以按预期工作。

我尝试比“超时”(30s)短,但仍然遇到问题。 我已经创建了一个控制台应用程序来测试我的代码,并且在它上可以正常工作。因此,我认为WPF上存在一些问题,但是我不知道在哪里看。

我的阅读功能

public ComandoFactory Ler()
{
    try
    {
        string Mensagem = sp.ReadTo("\r\n");
        var comando = new ComandoFactory(Mensagem.Substring(0,3), Mensagem.Substring(3));
        return comando;
    }
    catch (TimeoutException e)
    {
        return new ComandoFactory("ERR", "TIMEOUT");
    }
    catch(ArgumentOutOfRangeException e)
    {
        return new ComandoFactory("ERR", "ARGUMENT");
    }
}

ReadTo应该返回某些内容,而不是给出超时。

欢迎任何帮助。谢谢

1 个答案:

答案 0 :(得分:0)

我通过在写入和读取操作之间创建一个小的等待来解决此问题。 100毫秒解决了问题,代码现在可以正常工作。但是,我知道这不是最佳解决方案。 @Baddack使用DataReceived的想法可能更好,我会尽力尝试。