ComboBox不会显示在单独的线程中添加的项目

时间:2013-04-11 12:37:33

标签: c# multithreading lambda

我在单独的线程中将项目(字符串)加载到组合框中。加载完成后,组合似乎为空。但是,如果我开始在其中键入现有项目的名称,然后点击向下或向上箭头,它会自动填充我的项目,然后我突然看到组合中的所有项目。我究竟做错了什么? 注意:myItem只是我们使用名为Name的公共属性创建的类,getItems返回这些项的数组。

    void cmb_GotFocus(object sender, System.EventArgs e)
    {
        if (cmb.Items.Count == 0)
        {
            Thread thread = new Thread(new ThreadStart(GetItems));
            thread.Start();
        }
    }

    private void GetItems()
    {
        try
        {
            this.Invoke(new Action(() => cmb.Items.Clear()));

            myItem[] items = Library.GetItems();
            if (items != null && items.Length > 0)
            {
                foreach (myItem item in items)
                {
                    this.Invoke(new Action(() => cmb.Items.Add(item.name)));
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("Could not get items.\nError: " + ex.Message);
        }
    }

0 个答案:

没有答案