我是一名新生,基本上刚刚进入主题线程。
我要做的事情似乎相当简单。 我必须制作一个组合框,但我需要使用不同的线程填充它。 那就是我遇到麻烦的原因;
附加信息:跨线程操作无效:控制从其创建的线程以外的线程访问的“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);
}
答案 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);
}