1
我正在使用串口接收消息。下面的函數在一個線程中運行。當我調試我發現線程正常運行。但是「if(sp.IsOpen)」總是假的,因爲代碼在IF條件內根本不執行。它說港口已關閉。從串口接收消息的線程不能使用c#
我將在我的系統中有多個串行端口,我不知道哪個端口將收到消息。所以我需要聽一個線程中的所有端口。
我該如何解決我的問題?
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);
}
}
}
}
}
那麼,是否意味着我需要打開系統中用於接收消息的所有端口? – Anuya 2010-04-08 07:26:40
是的。請參閱http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.open.aspx – 2010-04-08 15:25:21
您可以使用每個端口的單獨線程(而不是DataReceived事件處理程序),但是您可以仍然需要打開端口才能使用它。 – 2010-04-08 15:27:01