wpf 串口通信 数据不定时接收
应用wpf做了个小软件,可以管理设备的信息。串口不定时接收到数据,在接收数据时怎样不影响软件的使用,后台直接处理数据,写了下面的程序,鼠标点击允许通信后如果没有执行其他任务可以接收到数据,但是只要鼠标点击软件中的别的选项后,就不能再接收到数据了,怎样才能持续等待串口发来的数据,不管此时软件在做什么都能不受干预的执行该任务。是需要触发器么?还是多线程?最好提供个例程可以参考下,多谢了!
private void Button_Click_14(object sender, RoutedEventArgs e)
{
try
{
if (!serialport1.IsOpen)
{
openclose.Content = "允许读卡器通信";
}
else
{
serialport1.Close();
openclose.Content = "禁止读卡器通信";
return;
}
serialport1.PortName = "COM1";
serialport1.BaudRate = 9600;
serialport1.Parity = Parity.None;
serialport1.StopBits = StopBits.One;
serialport1.Open();
serialport1.ReceivedBytesThreshold = 4;
serialport1.DataReceived += new SerialDataReceivedEventHandler(serialport1_DataReceived);
//flag = true;
}
catch
{
MessageBox.Show("打开串口失败,请重试!");
//处理超时错误
}
}
public void serialport1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
SerialPort Port = (SerialPort)sender;
int SeriaDataLength = Port.BytesToRead; //得到缓冲区数据长度
byte[] SeriaData = new byte[SeriaDataLength]; //设置数组
Port.Read(SeriaData, 0, SeriaDataLength); //读取缓冲区
interfaceUpdateHandle = new HandleInterfaceUpdateDelagate(UpdateTextBox);//实例化委托对象
Dispatcher.Invoke(interfaceUpdateHandle, new string[] { Encoding.ASCII.GetString(SeriaData) });
}
private void UpdateTextBox(string text)
{
////////////////////////////////////////////////////////////////////////
//<协议解析>
List<string> buf = new List<string>(text.Length);//声明一个临时数组存储当前来的串口数据
MessageBox.Show(text.Length.ToString());
MessageBox.Show(text);
for (int i = 0; i < text.Length / 2; i++)
{
buf.Add(text.Substring(i * 2, 2));
}
while (text.Length >= 5) //至少要包含头(2字节)+命令(1字节)+数据长度(1字节)+校验(1字节)
{
if (buf[0] == "aa" && buf[1] == "01")
{
if (buf[2] == "01")//归还设备
{
string device = text.Substring(6, 8);
sqlHelper.comreturn(device);
MessageBox.Show("设备已归还");
}
else if (buf[2] == "02")
{
string device = text.Substring(6, 8);
}
}
else
{
buf.RemoveAt(0);
}
}