//System.Windows .Forms .MessageBox .Show ( GlobalVals.omronPlcNj.NjReadReal("D4783").ToString ());
List<string> dataList=new List<string> ();
dataList =GlobalVals .omronPlcNj .ReadProductData ();
if (dataList !=null)
{
//list<>方式输出
productListDataDisp.Add(dataList);
//List<>方式缓存一下数据
productListDataSave.Add(dataList);
Task task = Task.Run(() => {
while (productListDataSave .Count >0)
{
List<string> saveProductData = productListDataSave[0];
productListDataSave.Remove(saveProductData);
//将数据存储到csv文件中
GlobalVals.csvServer.SaveCSV(saveProductData, true, "34.csv");
//数据显示到ProductDataForm,使用事件将数据传递出去
//一定要先挂载上,在运行这个函数不然会报错
//DispData(this, new ProductEventArg(dataList));
//数据存储到数据库里便于本地检索
saveProductData.Insert(0, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
GlobalVals.mySqlHelper.InsertGluingSystemData(saveProductData);
//返回值写到PLC里
}
});
上面代码对dataList进行了引用,当改变dataList时所有对其引用的dataList都会发生改变,因此要进行一次深度复制到另一个List变量里,这样改变其中一个,另一个不会关联改变
改变后的代码,有关深度复制List的方法可以参考链接
https://blog.csdn.net/keneyr/article/details/88263962
//System.Windows .Forms .MessageBox .Show ( GlobalVals.omronPlcNj.NjReadReal("D4783").ToString ());
List<string> dataList=new List<string> ();
dataList =GlobalVals .omronPlcNj .ReadProductData ();
if (dataList !=null)
{
//复制一个dataList,不然后面对dataList添加一个时间列时productListDataDisp也会被增加时间列,原因是dataList是引用型的变量
List<string> dataListCopy = new List<string>(dataList.ToArray());
//list<>方式输出
productListDataDisp.Add(dataListCopy);
//List<>方式缓存一下数据
productListDataSave.Add(dataList);
Task task = Task.Run(() => {
while (productListDataSave .Count >0)
{
List<string> saveProductData = productListDataSave[0];
productListDataSave.Remove(saveProductData);
//将数据存储到csv文件中
GlobalVals.csvServer.SaveCSV(saveProductData, true, "34.csv");
//数据显示到ProductDataForm,使用事件将数据传递出去
//一定要先挂载上,在运行这个函数不然会报错
//DispData(this, new ProductEventArg(dataList));
//数据存储到数据库里便于本地检索
saveProductData.Insert(0, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
GlobalVals.mySqlHelper.InsertGluingSystemData(saveProductData);
//返回值写到PLC里
}
});