Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将数据从动态列表设置为组合框时出错_C#_Multithreading_Winforms_List_Combobox - Fatal编程技术网

C# 将数据从动态列表设置为组合框时出错

C# 将数据从动态列表设置为组合框时出错,c#,multithreading,winforms,list,combobox,C#,Multithreading,Winforms,List,Combobox,你好。 想请求帮助解决WinForm中组合框中的数据集错误,我从网页组合框中获得。关键是,我解析的站点数据被塞进了列表,但由于这个错误,我无法设置 "Invalid operation in several threads: attempt to access control "combo-box" from another thread in which it was created." 但更有趣和困惑的是,我必须手动将数据推送到列表中,然后当我按下按钮时,数据就会显示出来 public

你好。 想请求帮助解决WinForm中组合框中的数据集错误,我从网页组合框中获得。关键是,我解析的站点数据被塞进了列表,但由于这个错误,我无法设置

"Invalid operation in several threads: 
attempt to access control "combo-box" from another thread 
in which it was created."
但更有趣和困惑的是,我必须手动将数据推送到列表中,然后当我按下按钮时,数据就会显示出来

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";
}
公共类组合项
{
公共字符串名称{get;set;}
公共int Id{get;set;}
公共组合项(字符串文本,int值)
{
名称=文本;
Id=值;
}
}
私有无效按钮3\u单击(对象发送者,事件参数e)
{
列表项=新列表();
BindingSource bs=新的BindingSource();
添加(新组合项(“John”,1));
bs.DataSource=项目;
cb_category.DataSource=bs.DataSource;
cb_category.DisplayMember=“Name”;
cb_category.ValueMember=“Id”;
}
如果我动态地将数据放入列表中,就会得到一个错误

public class ComboItem
{
   public string Name { get; set; }
   public int Id { get; set; }
   public ComboItem(string text, int value)
   {
      Name = text;
      Id = value;
   }
}

/*-----------MY Function--------------*/
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";
公共类组合项
{
公共字符串名称{get;set;}
公共int Id{get;set;}
公共组合项(字符串文本,int值)
{
名称=文本;
Id=值;
}
}
/*-----------我的职能--------------*/
对于(int i=0;i

请告诉我在这种情况下如何组织第二个线程。非常感谢。哦对不起,我的英文是:)

调用combobox对象上的
BeginInvoke
,在UI上执行委托 像这样

这将异步执行委托。如果希望同步执行委托,请调用
Invoke

可能重复的
cb_category.BeginInvoke((Action)delegate 
{
    cb_category.DataSource = items;
    cb_category.DisplayMember = "Name";
    cb_category.ValueMember = "Id";
});