2014-01-12 2 views
0

내가 (툴킷 차트 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

"C# Collection was modified"검색 - 여러 번 전에 물어보기. 먼저 검색해보십시오. –

+0

예 : 첫 번째 히트 (그리고 거기에로드가) : http://stackoverflow.com/questions/604831/collection-was-modified-enumeration-operation-may-not-execute –

답변

1

목록 개체는 스레드로부터 안전하지 않습니다. 재진입 타이머를 사용하고 있다고 가정합니다. 귀하의 코드는 매 10 밀리 초마다 새 스레드에서 실행되며 매번 List <>가 변경됩니다.

시간/틱 (어쩌면 100ms로)을 변경하고 문제가 없어지는지보십시오. 또한 목록 대신 ConcurrentBag<T>을 사용해야합니다. 동시 추가 및 반복을 지원합니다. 편집 주석으로 추가 하겠지만 코드에서 수행하려는 작업은 나에게 의미가 없습니다.

관련 문제