目前逻辑是,单片机执行完一行指令回返回一个ok。
上位机收到一个ok值则计数-1
上位机每发送一行数据都计数+1,发送前为判断计数是否超过某个值,超过则暂停发送,直到收到ok,计数满足要求。
请问代码哪里有问题。
补充:现在的问题好像跟跨线程有关,手动逐行发送计数都没问题。通过按钮事件循环发送,发送事件没结束前,接收数据事件没法执行。
//点击发送按钮事件,逐行发送listBoxgcode中全部内容
private void simpleButton12_Click(object sender, EventArgs e)
{
send_rows = 0;//已发送行数
for (int i = 0; i < listBoxgcode.Items.Count; i++)
{
serialPort1.Write(listBoxgcode.Items[i].ToString() + "\r");//回车符为单片机识别的结束位,需加上
send_rows += 1;//每发送一行,计数+1
while (send_rows > 30)//发送行数大于30行则停留在此循环
{
System.Threading.Thread.Sleep(100);//延时0.1s
}
}
}
/// 串口接收数据事件,收到一个ok,则send_rows-1
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
string mystring = serialPort1.ReadExisting();
if (mystring.Contains("ok"))
send_rows -= 1;
getmystring = new getstring(DoUpdate_tbRecieve); //调用tbrecieve委托事件
Invoke(getmystring, mystring);
}
catch (Exception EX)
{
MessageBox.Show(EX.Message, "出错", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}