问题描述:做项目时用到了串口读写,将扫码枪的数据显示到界面上。虽然很简单,但对于编程瓜皮的我,还是记录下来,方便以后学习。。。
public class
{
public static SerialPort serialPort = null;
public delegate void showScanerTrayNumEventHandler();
public static event showScanerTrayNumEventHandler showScanerTrayNum;
public void StartScanerWork()
{
serialPort = new SerialPort();
serialPort.PortName = globModelData.configmodelData.ScanerPortParam.PortName;
serialPort.BaudRate = Convert.ToInt32(globModelData.configmodelData.ScanerPortParam.BaudRate);
serialPort.Parity = Parity.None;
serialPort.DataBits = Convert.ToInt32(globModelData.configmodelData.ScanerPortParam.DataBits);
serialPort.StopBits = StopBits.One;
serialPort.ReadTimeout = 3000;//单位毫秒
serialPort.WriteTimeout = 3000;//单位毫秒
//设置串口字节接收缓冲值,通常为1
//获得接收后,触发事件处理
serialPort.ReceivedBytesThreshold = 1;
serialPort.DataReceived += new SerialDataReceivedEventHandler(ShowScanerResult);
try
{
serialPort.Open();
//Console.WriteLine(serialPort.IsOpen.ToString());
}
catch (Exception ex)
{
MessageBox.Show("串口打开失败" + ex.ToString());
System.Environment.Exit(0);//退出应用程序
}
}
public void ShowScanerResult(Object sender, SerialDataReceivedEventArgs e)
{
Thread.Sleep(50);
int len = serialPort.BytesToRead;
Byte[] readBuffer = new Byte[len];
serialPort.Read(readBuffer, 0, len); //将数据读入缓存
//Thread.Sleep(1000);
//处理readBuffer中的数据,自定义处理过程
globModelData.trayNum = System.Text.Encoding.Default.GetString(readBuffer);
Console.WriteLine(globModelData.trayNum);
if(showScanerTrayNum != null)
{
//触发事件
showScanerTrayNum();
}
}
}