Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Ошибка установки данных в Combo-box с List'a

72K
29 марта 2014 года
Num2
17 / / 22.08.2013
Доброго времени суток.
Хотел попросить помощи в решении ошибки установки данных в Combo-box в WinForm'e, которые я получил с Combo-box'a сайта. Вся суть в том, что данные с сайта я спарсил, запихнул в List, но установить не могу, т.к. вылетает ошибка "Недопустимая операция в нескольких потоках: попытка доступа к элементу управления "combo-box" не из того потока, в котором он был создан."

Но что еще интересно и ставит меня в тупик, я вручную запихиваю в List данные, а потом при нажатии на кнопку - данные отображаются.


Код:
public class ComboItem
        {
            public string Name { get; set; }
            public int Id { get; set; }
            public ComboItem(string text, int value)
            {
                Name = text;
                Id = value;
            }
        }
     
     
    private void button3_Click(object sender, EventArgs e)
            {
                List<ComboItem> items = new List<ComboItem>();
                BindingSource bs = new BindingSource();
                items.Add(new ComboItem("John", 1));
     
                 bs.DataSource = items;
                 cb_category.DataSource = bs.DataSource;
                 cb_category.DisplayMember = "Name";
                 cb_category.ValueMember = "Id";
            }
А если данные в List ставлю динамически - ошибка


Код:
public class ComboItem
        {
            public string Name { get; set; }
            public int Id { get; set; }
            public ComboItem(string text, int value)
            {
                Name = text;
                Id = value;
            }
        }
 
/*-------------------------*/
 
                for (int i = 0; i < idCategory.Count-1; i++)
                {
                    int num = Convert.ToInt32(idCategory[i]);
                    nameCategory = SearchAndInput(dataCategory.InnerHtml, "<option value=""+num+"">", "rn");
                    items.Add(new ComboItem(nameCategory[0].ToString(), num));
                }
 
                BindingSource bs = new BindingSource();
                bs.DataSource = items;
                cb_category.DataSource = bs.DataSource;
                cb_category.DataSource = items;
                cb_category.DisplayMember = Name;
                cb_category.ValueMember = "Id";
подскажите плз как правильно организовать этот 2й поток в этом случае
72K
29 марта 2014 года
Num2
17 / / 22.08.2013
Проблема решена, если кто-то столкнется с подобной фигней - даю решение.

 
Код:
cb_category.BeginInvoke((Action)delegate
{
  bs.DataSource = items;
  cb_category.DataSource = bs.DataSource;
  cb_category.DataSource = items;
  cb_category.DisplayMember = "Name";
  cb_category.ValueMember = "Id";
});
72K
29 марта 2014 года
Num2
17 / / 22.08.2013
во втором куске кода нечайно скопировал не правильный кусок кода... забыл скобки в cb_category.DisplayMember = Name; -> cb_category.DisplayMember = "Name";
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог