串口通信抛出TimeoutException

时间:2016-09-06 12:48:09

标签: c# multithreading serial-port

跟进Serial Port Communication solution我实施了以下设计。我的代码使用com8与在同一台计算机上监听com9的{​​{3}}进行通信,然后发回(手动输入消息并按下按钮)

在我的主要内容中我这样做:

MyClass MyObj = new MyClass();
var message = MyObj.SendThenRecieveDataViaSerialPort("Test");

然后在课堂上我有这个:

private static SerialPort MainSerialPort { get; set; } = new SerialPort();
private static string _ReceivedMessage;
private Thread readThread = new Thread(() => ReadSerialPort(ref _ReceivedMessage));

public string SendThenRecieveDataViaSerialPort(string _Message)
{
    MainSerialPort = new SerialPort("com8", 9600);
    MainSerialPort.ReadTimeout = 5000;
    MainSerialPort.WriteTimeout = 5000;
    MainSerialPort.Open();
    readThread.Start(); // 1

    try
    { // 2
        MainSerialPort.WriteLine(_Message); // 3
        readThread.Join(); // 6 - Console pops and waits
    }
    catch (TimeoutException ex)
    {
        Console.WriteLine("Exception in SendThenreceive");
    }

    return _ReceivedMessage;
}

private static void ReadSerialPort(ref string _message)
{
    try
    { // 4
        _message= MainSerialPort.ReadLine(); // 5 
    }
    catch (TimeoutException ex)
    {
        // 7 - when time outs
    }
}

然而,在第7步发出错误说:

  

{"操作已经超时。"}

     

InnerException:null

你可以告诉我哪里出错了吗?拜托,谢谢。

1 个答案:

答案 0 :(得分:2)

ReadLine一直等到它看到SerialPort.NewLine字符串。如果未在SerialPort.ReadTimeout内到达,则抛出TimeoutException。所以不要错过发送NewLine!

这是没有NewLine的替代版本。

<script>
相关问题