新手在线程

时间:2016-11-06 15:52:43

标签: c# multithreading

我是一名新生,基本上刚刚进入主题线程。

我要做的事情似乎相当简单。 我必须制作一个组合框,但我需要使用不同的线程填充它。 那就是我遇到麻烦的原因;

附加信息:跨线程操作无效:控制从其创建的线程以外的线程访问的“ComboBox”。

所以我做了一些研究,似乎你不能在主线程之外填充UI元素。所以我坐在这里摸不着头脑,想着最好的事情。

帮助将不胜感激。

哦顺便说一下,它的C#和Windows窗体。

         public Customer()
    {
        InitializeComponent();
        Thread red = new Thread(Fill);
        red.Start();
    }
    public void Fill()
    {
        Thread.Sleep(5000);
        ComboBox1.Items.Add(1);
        ComboBox1.Items.Add(2);
        ComboBox1.Items.Add(3);
        ComboBox1.Items.Add(4);
        ComboBox1.Items.Add(5);
        ComboBox1.Items.Add(6);
        ComboBox1.Items.Add(7);
    }

1 个答案:

答案 0 :(得分:-1)

您应该考虑使用任务并行库,现在显式创建一个Thread被认为是遗留代码。但是,要修复代码,需要在UI线程上调用UI更新。

public void Fill()
{
   Thread.Sleep(5000);

   Action doUIWork = () => 
   {
      ComboBox1.Items.Add(1);
      ComboBox1.Items.Add(2);
      ComboBox1.Items.Add(3);
      ComboBox1.Items.Add(4);
      ComboBox1.Items.Add(5);
      ComboBox1.Items.Add(6);
      ComboBox1.Items.Add(7);
   };

   this.Invoke(doUIWork);
}