【发布时间】:2016-09-06 12:48:09
【问题描述】:
跟进Serial Port Communication solution 我实现了以下设计。我的代码使用com8 与在同一台机器上监听com9 的Serial Port Utility Application 通信,然后发回(我手动输入消息并按下按钮)
我主要是这样做的:
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
你能告诉我哪里出错了吗?请和谢谢。
【问题讨论】:
-
我们不是已经经历过了吗?您必须设置 Handshake 属性,它不是可选的。如果您使用 Handshake.None,那么您必须将 DtrEnable 和 RtsEnable 属性设置为 true。您使用的实用程序仅用于与设备对话,而不是与您的程序对话。将 PC 发送回 PC 的数据的本地环回需要一根将 com8 连接到 com9 的空调制解调器电缆。你的线程坏了,它只能读一次。不要使用线程。
-
嘿,汉斯先生 \o/ 再一次:)。我还在苦苦挣扎 :( 我有一条从 com8 到 com9 的硬件电缆!而且我无法重现上次的问题,所以我使用了这个多线程。我现在正在尝试
MyPort.Handshake = SetPortHandshake(MyPort.Handshake);和 MSDN !
标签: c# multithreading serial-port