我写了下面的代码来传输串口上的数据。我可以发送数据,但我的接收功能无法正常工作。它有时会工作并收到错误的数据。 例如我,除了它接收" 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);
}
}
}