Я использую последовательный порт для получения сообщений.Функция ниже работает в потоке.Когда я отлаживаю, я обнаруживаю, что поток работает правильно.Но «if (sp.IsOpen)» всегда ложно, из-за чего код вообще не выполняется внутри условия IF.Это говорит, что Порт закрыт.
У меня будет несколько последовательных портов в моей системе, и я не буду знать, какой порт получит сообщение.Поэтому мне нужно слушать все порты в одном потоке.
Как мне решить мою проблему здесь?
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);
}
}
}
}
}