Как отправить ответное сообщение отправителю через последовательный порт, используя c # - PullRequest
0 голосов
/ 12 апреля 2010

Я использую приведенный ниже код для получения сообщения через последовательный порт, который работает нормально. Теперь мне нужно отправить сообщение-подтверждение на машину отправителя. Как можно отправить сообщение?

       private void MonitorSP_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        try
        {
            System.IO.Ports.SerialPort SP = (System.IO.Ports.SerialPort)sender;

            //Get the ports available in system
            string[] theSerialPortNames = System.IO.Ports.SerialPort.GetPortNames();
            string strAvlPortNames = "";
            foreach (string s in theSerialPortNames)
            {
                strAvlPortNames += s.ToString() + ", ";
            }

            //Read an contruct the message
            Thread.Sleep(1000);
            string msg = SP.ReadExisting();
            string ConstructedMsg = "Port's Found : " + strAvlPortNames + "\n" + "Port Used : " + SP.PortName + "\n" + "Message Received : " + msg;

            if (InvokeRequired)
            {
                richTextBox1.Invoke(new MethodInvoker(delegate { richTextBox1.Text = ConstructedMsg; }));
                //Send acknowlegement to sender port
                SP.Write(SP.PortName);
                return;
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.StackTrace.ToString());
        }
    }  

1 Ответ

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

Вы уже вызываете SP.Write (), который должен быть закрыт. Хотя вы, вероятно, не хотите отправлять имя порта обратно, отправитель мало что использует для этого. Это также не должно быть в тесте InvokeRequired. Что всегда верно, кстати, вы могли бы также удалить это.

Вы также действительно хотите избавиться от вызова Sleep (). Используйте ReadLine (), если отправитель завершает свое сообщение переводом строки ("\ n"). Если вы обдумываете это, потому что вам нужно, чтобы отправитель прекратил отправку, пока не получит подтверждение, тогда проблема real в том, что вы используете Sleep и ReadExisting.

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