使用c#从串口接收消息的线程不起作用

时间:2010-04-08 07:00:54

标签: c# serial-port

我使用串口接收消息。以下函数在一个线程中运行。当我调试我发现该线程正常运行。但是“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);

                    }
                }           
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

串口的初始化代码在哪里?特别是行SerialPort.Open();

看看使用

SerialPort.DataReceived += 
  new SerialDataReceivedEventHandler(SerialDataReceivedEventHandler);

从而接收来自他们的数据。