我写了这段代码来创建一个图表(通过使用wpf工具包图表),但是我收到了这个错误,
private void Window_Loaded(object sender, RoutedEventArgs e)
{
LoadLineChartData2();
}
private void LoadLineChartData2()
{
time= new Timer(10);
time.Elapsed += new ElapsedEventHandler(time_Elapsed);
time.Start();
}
Timer time;
List<KeyValuePair<double, int>> list = new List<KeyValuePair<double, int>>();
int index = 0;
void time_Elapsed(object sender, ElapsedEventArgs e)
{
list.Add(new KeyValuePair<double,int>(1.0/int.Parse(e.SignalTime.Second.ToString()),index++));
this.Dispatcher.Invoke(new Action(()=> {
((System.Windows.Controls.DataVisualization.Charting.LineSeries)mcChart.Series[0]).ItemsSource = list;
if (index>200)
{
time.Stop();
}
}));
}
erorr:收集被修改;枚举操作可能无法执行。
错误是什么以及如何动态添加点?
答案 0 :(得分:1)
您的列表对象不是线程安全的。我假设你也在使用重入计时器。您的代码将每10毫秒在一个新线程中执行,这可能会导致List&lt;&gt;每次都要改变。
尝试更改时间/刻度(可能为100毫秒),看看问题是否消失。您还应该使用ConcurrentBag<T>
代替列表,这将支持并发添加和迭代。虽然我要添加一篇编辑评论,但你在代码中尝试做的事情对我来说没有意义。