跟进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
答案 0 :(得分:2)
ReadLine一直等到它看到SerialPort.NewLine字符串。如果未在SerialPort.ReadTimeout内到达,则抛出TimeoutException。所以不要错过发送NewLine!
这是没有NewLine的替代版本。
<script>