急,关于串口通信收发同步的问题
由于某种原因,串口发送被写在了一个循环里面,表示需要多次发送,然而希望是发-收-发-收这样的步调同步工作。根据跟踪,发现目前的程序必须在所有循环执行完毕,也就是所有发送动作完成后,才会去执行串口的DATARECIEVE事件,去读缓冲。如何实现这样的同步呢?
发送的代码是这样的:
foreach (int iFN in SelectedFN)
{
//** AFN,FN都有了,其他在界面上填入,开始组建通信帧
textFN.Text = iFN.ToString();
List<byte> frame = new List<byte>(512);
MakeFrame(ref frame, iFN);
//** 然后发送这个帧
string sframe = "";
foreach (byte b in frame)
{
sframe += b.ToString("X2");
sframe += " ";
}
sframe += "\r\n";
SendFrame(frame);
this.BeginInvoke((EventHandler)(delegate
{
richTextBox1.AppendText(sframe);
}));
Thread.Sleep(3000);
}
根据日志文件,发送动作确实是每3秒发送一下。而函数Sendframe(frame)只是简单的调用了串口的write方法。
问题是串口的DATARECIEVED是在这个循环执行完毕后,程序返回,才开始处理的。
想了很久,不知道该怎么实现?用全局变量来同步?也不行,因为调试发现是发送的循环执行完才触发了读串口缓冲的动作