为什么comPort_DataReceived工作一段时间并得到错误的数据

时间:2014-06-04 05:42:40

标签: c#

我写了下面的代码来传输串口上的数据。我可以发送数据,但我的接收功能无法正常工作。它有时会工作并收到错误的数据。 例如我,除了它接收" a" ,但它得到"?〜|" 。 我尝试了没有线程的代码" BoardConnecion()"它工作正常。 我认为这是因为这个线程。 有时,我发送数据和comPort_DataReceived收到错误。有些时候comPort_DataReceived无法正常工作。

     bool boardIsConnect = false;
    CommunicationManager objConn;
    SerialPort _serialPort;
    bool _portIsOpen = false;
    Thread threadConnection;


         void configurePort()
         {
        _serialPort = new SerialPort();
        _serialPort.Parity = Parity.None;
        _serialPort.BaudRate = 19200;
        _serialPort.StopBits = StopBits.One;
        _serialPort.DataBits = 8;
        _serialPort.Handshake = Handshake.None;

        _serialPort.DataReceived += new SerialDataReceivedEventHandler(comPort_DataReceived);
        //_serialPort.ReadTimeout = 1000;
        _serialPort.RtsEnable = true;     // Request-to-send
        _serialPort.DtrEnable = true;    // Data-terminal-ready

         }

        private void Form1_Load(object sender, EventArgs e)
        {
       threadConnection = new Thread(BoardConnecion);
        threadConnection.Start();
         }


       void BoardConnecion()
        {
        while (true)
        {
            using (objConn = new CommunicationManager())
            {
                string portName = objConn.FindSuitablePort();

                if (portName != "")     //board is on
                {

                    boardIsConnect = true;
                    if (!_portIsOpen)
                    {
                        _portIsOpen = true;
                        configurePort();
                        _serialPort.PortName = portName;
                        _serialPort.Open();


                    }

                    DisplayImageMenu(_pic_usb, "on.png");



                }


                else   //board is off
                {

                    boardIsConnect = false;
                    if (!_portIsOpen)
                    {
                        //_serialPort.Close();
                        //_serialPort.Dispose();
                    }

                    _portIsOpen = false;

                    DisplayImageMenu(_pic_usb, "off.png");

                       }
                       }

                    }

                   }




        public void WriteData(byte[] msg)
    {

        if (boardIsConnect)
        {

            _serialPort.Write(msg, 0, msg.Length);
        }
    }

    private void comPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        if (boardIsConnect)
        {
            string msg = _serialPort.ReadExisting();
            if (msg == "a")
            {
                byte[] bytesToSend = new byte[1] { 0x62 };
                WriteData(bytesToSend);

            }
        }
    }

0 个答案:

没有答案