Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Проблема с обращением к коллекции


Автор: ДобренькийПапаша 26.4.2010, 08:31
Запускаю в новом потоке функцию, которая парсит файл. Она выдирает нужные значения для построения графика.

Код

private void StartParsing()
        {
            Thread chart = new Thread(ParseFile);
            chart.Start();    
        }
private void ParseFile()
        {
            this.x.Clear();
            this.y.Clear();
            string[] file;
           
            file = File.ReadAllLines(this.fileFullPath);
            
            //Кое-какие детали я опустил.

//Тут заполняю x
            for (int i = 1; i < rows; i++)
            {
                char[] date = parts[i, 2].ToCharArray();
                char[] time = parts[i, 3].ToCharArray();

                // ReSharper disable RedundantToStringCall
                string specifyDate = (date[6].ToString() + date[7].ToString() + '.' + date[4].ToString() + date[5].ToString() + '.' + date[0].ToString() + date[1].ToString() + date[2].ToString() + date[3].ToString() + " " + time[0] + time[1] + ":" + time[2] + time[3]);
                                  
                x.Add(DateTime.Parse(specifyDate));
            }


//Тут заполняю y
            for (int i = 1; i < rows; i++)
            {
                y.Add(double.Parse(parts[i, 7].Replace('.', ',')));
            }

            if (currentChart.InvokeRequired)
            {
                if (this.currentChart != null)
                {
                    Invoke(new Action(() =>
                                          {
                                              currentChart.Series.Clear();
                                              Series series1 = new Series();
                                              series1.ChartArea = "ChartArea1";
                                              series1.ChartType = SeriesChartType.Line;
                                              series1.Legend = "Legend1";
                                              //series1.Name = "";
                                              series1.XValueType = ChartValueType.DateTime;
                                              series1.YValueType = ChartValueType.Double;
                                              currentChart.Series.Add(series1);
                                              currentChart.Series[0].Points.DataBindXY(x, y); //Вылет, количество значений x не соответствует 
                                                                                                                         //количеству значений y.
                                          }));
                }
            }


Дебаггер врёт. Всё там соответствует. Смотрю при дебаге коллекцию x и коллекцию y, а там в свойству Count написано "Count = Function evaluation disabled because a previous function evaluation timed out. You must continue execution to reenable function evaluation"

Я так понял, что-то у меня с потоками плохо)))
Подскажите как правильно?

Автор: ДобренькийПапаша 26.4.2010, 16:17
Сделал через делегат с вызовом BeginInvoke() и EndInvoke() и всё нормально. Я так понял, что если операция реально долгая, то надо асинхронно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)