我使用串口接收消息。以下函数在一个线程中运行。当我调试我发现该线程正常运行。但是“if(sp.IsOpen)”始终为false,因此代码根本不在IF条件内执行。它说港口已关闭。
我的系统中将有多个串口,我不知道哪个端口会收到该消息。所以我需要听一个Thread中的所有端口。
我如何在这里解决我的问题?
private void ListenerPorts()
{
log.Info("Listening Thread Started");
while (true)
{
//foreach (SerialPort sp in storeport)
foreach (SerialPort sp in comPortsList)
{
if (sp.IsOpen)
{
sp.ReadTimeout = readTimeoutInMs;
sp.WriteTimeout = writeTimeoutInMs;
try
{
string msg = sp.ReadLine();
this.GetMessageRichTextBox("Message : " + msg + "\n");
sp.WriteLine(sp.PortName);
if (msg.Contains("COM"))
{
// is AutoScan
receiverPortName = sp.ReadLine();
this.updateLblStatusRichTextBox(sp.PortName + " is connected to " + msg + "\n");
}
else
{
//standalone is uppercase
ReceiverPortName = sp.ReadLine();
this.updateLblStatusRichTextBox(sp.PortName + " is connected to " + ReceiverPortName + "\n");
}
}
catch (Exception ex)
{
// no data
System.Diagnostics.Debug.WriteLine(sp.PortName + " : " + ex.Message);
}
}
}
}
}
答案 0 :(得分:0)
串口的初始化代码在哪里?特别是行SerialPort.Open();
?
看看使用
SerialPort.DataReceived +=
new SerialDataReceivedEventHandler(SerialDataReceivedEventHandler);
从而接收来自他们的数据。