Поток для получения сообщений от последовательного порта не работает с использованием C # - PullRequest
1 голос
/ 08 апреля 2010

Я использую последовательный порт для получения сообщений.Функция ниже работает в потоке.Когда я отлаживаю, я обнаруживаю, что поток работает правильно.Но «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);

                    }
                }           
            }
        }
    }

1 Ответ

0 голосов
/ 08 апреля 2010

Где ваш код инициализации для последовательных портов? А в частности строка SerialPort.Open();?

Взгляните на использование

SerialPort.DataReceived += 
  new SerialDataReceivedEventHandler(SerialDataReceivedEventHandler);

для получения данных от них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...