c# - 如何避免“集合被修改;枚举操作可能无法执行”。在刷新 C# 图表期间?
问题描述
我在尝试使用一段时间并不断刷新图表时遇到了这个问题。首先,我使用函数:AddY() 和函数:removeAt() 来更新最新数据,例如示例 1。
我也尝试使用数组来保存数据并自己左移数据,并添加最新数据。刷新数组后,我使用函数:DataBindY() 来绘制图表。请参考示例 2。
构建过程中没有报错,功能正常,随机等待一段时间,图表会变成一个红叉,并跳出错误信息“集合已修改;枚举操作可能无法执行”。
构建成功有两个奇怪的事情,这意味着代码是正确的,对吧?其次是“随机时间”,每次尝试的生存时间都不一样。这真的没有意义。我在网上搜索过这个错误信息,但我找不到熟悉的情况。
有没有人遇到过同样的情况可以帮助我解决这个问题?
谢谢。
顺便说一句,我的窗口系统是 Win7,C# 版本是 2010。
示例 1
bool fg_remove_chart_point = false;
uint counter = 0;
while (true)
{
Thread.sleep(1000);
if (counter > 100)
fg_remove_chart_point = true;
if (fg_remove_chart_point)
{
chart_1.ChartAreas[0].AxisX.Minimum = 0;
chart_1.ChartAreas[0].AxisX.Maximum = 100 + 2;
chart_1.Series[0].Points.RemoveAt(0); //Delete
chart_1.Update();
}
chart_1.Series[0].Points.AddY(50); //Draw chart
chart_1.Update();
counter++;
}
示例 2
double[] temperature = { };
bool fg_remove_chart_point = false;
uint counter = 0;
while (true)
{
Thread.sleep(1000);
if (counter > 100)
fg_remove_chart_point = true;
if (fg_remove_chart_point)
{
chart_1.ChartAreas[0].AxisX.Minimum = 0;
chart_1.ChartAreas[0].AxisX.Maximum = 100 + 2;
//Update the array
for (int x = 0; x < (100 - 1); x++)
temperature[x] = temperature[x + 1];
temperature[100 - 1] = Convert.ToDouble(50);
}
else
{
Array.Resize<double>(ref temperature, Convert.ToInt16(counter));
temperature[counter - 1] = Convert.ToDouble(50);
}
chart_1.Series[0].Points.Clear();
chart_1.Series[0].Points.DataBindY(temperature); //Use array to draw chart
chart_1.Update();
counter++;
}