while (IsLoad1)
{
lock (open1Lock)
{
Thread.Sleep(30);
if (Model.TestItem.PistonState1 == 2)
{
Task.Delay(170);
dataSuctionResistance1.Add(Model.TestItem.SuctionResistance_Stabilization1);
dataConcentration1.Add(Model.TestItem.Concentration1);
}
else if (Model.TestItem.PistonState1 == 3&&Open1== Model.TestItem.PuffNumber1)
{
Open1++;
averageSuctionResistance1 = AverageSuctionResistance1(dataSuctionResistance1);
averageConcentration1 = AverageConcentration1(dataConcentration1);
sb.Append("Insert Into Lin_Data(ID,Place,TestTime,PuffNumber,SuctionResistance,Smokescope,TestResult,BarCode)\r\n");
sb.Append(string.Format("Values('{0}','{1}','{2}','{3}',\r\n", null, 1, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), Model.TestItem.PuffNumber1));
sb.Append(string.Format("'{0}','{1}','{2}','{3}');\r\n", Math.Round(averageSuctionResistance1,2), Math.Round(averageConcentration1,2), Model.TestItem.TestResult1 ? "OK" : "NG", Model.TestItem.BarCode1));
sListSql.Add(sb.ToString());
dataSuctionResistance1.Clear();
dataConcentration1.Clear();
Application.DoEvents();
//}
}
}
这一段代码只在一个线程内执行,按理来说else if (Model.TestItem.PistonState1 == 3&&Open1== Model.TestItem.PuffNumber1)这个判断只进入一次的因为进去之后Open1会++处理就不相等了但是,收集数据的过程中发现会进入多次也就是在执行Open1++前已经进入了多次为什么会出现这种情况