收集被修改;枚举操作可能无法执行

时间:2014-01-12 04:45:35

标签: c# wpf charts

我写了这段代码来创建一个图表(通过使用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:收集被修改;枚举操作可能无法执行。

错误是什么以及如何动态添加点?

1 个答案:

答案 0 :(得分:1)

您的列表对象不是线程安全的。我假设你也在使用重入计时器。您的代码将每10毫秒在一个新线程中执行,这可能会导致List&lt;&gt;每次都要改变。

尝试更改时间/刻度(可能为100毫秒),看看问题是否消失。您还应该使用ConcurrentBag<T>代替列表,这将支持并发添加和迭代。虽然我要添加一篇编辑评论,但你在代码中尝试做的事情对我来说没有意义。