c#串口多线程数据读写问题
脚跟着地 2010-03-13 12:56:46 设计一个串口的程序,硬件是USB转485的,要读出设备的数据并保存。
SerialPort类有DataReceived事件,所以读串口可以不用自己设线程了。因为要经常询问以得到设备的数据,所以要重启一个线程去读。单不知如何实现?
因为在询问数据时可能还会有其他的操作发出串口的命令,怎么样做才能避免相互的干扰?
因为是485的,所以自己发出的数据也是能收到的,数据比较乱,不知如何分析取得的字符串?
自己做了一点程序,在执行到join时总是死机。
private void btnOpenPort_Click(object sender, EventArgs e)
{
if (comport.IsOpen)
{
comport.Close();
getDataThread.Join();
}
else
{
comport.BaudRate = int.Parse(cmbBaudRate.Text);
comport.DataBits = int.Parse(cmbDataBits.Text);
comport.StopBits = (StopBits)Enum.Parse(typeof(StopBits), cmbStopBits.Text);
comport.Parity = (Parity)Enum.Parse(typeof(Parity), cmbParity.Text);
comport.PortName = cmbPortName.Text;
comport.ReadTimeout = 500;
comport.WriteTimeout = 500;
try
{
comport.Open();
getDataThread.Start();
}
catch (Exception)
{
MessageBox.Show("串口被占用!");
}
}
EnableControls();
if (comport.IsOpen) txtSendData.Focus();
}
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
int bytes = comport.BytesToRead;
byte[] buffer = new byte[bytes];
comport.Read(buffer, 0, bytes);
Log(LogMsgType.Incoming, ByteArrayToHexString(buffer));
}
private void GetData()
{
while (comport.IsOpen)
{
byte[] data = HexStringToByteArray("FD 01 00 C8 00 FE");
try
{
comport.Write(data, 0, data.Length);
}
catch (Exception)
{
MessageBox.Show("数据发送错误!控制器无响应!");
}
Log(LogMsgType.Outgoing, ByteArrayToHexString(data) + "\n");
}
}