我有一个在通过Invoke调用的方法中显示的Forms,因为该方法是从另一个线程调用的。在我需要打开的表单中,我有一个带有ComboBox的UserControl。如果ComboBox.DropDownStyle
为Simple
,则表单会显示爆炸
InvalidOperationException:跨线程操作无效:控制 'comboBox1'从线程以外的线程访问 创建于。
如果我将ComoBox.DropDownStyle设置为默认值(DropDown),我没有问题。
我现在有点难以理解(甚至相信)所以这里有一个简化的例子来重现它:
private Form form;
private delegate void ShowDelegate();
private ShowDelegate showDelegate;
private void Form1_Load(object sender, EventArgs e)
{
showDelegate = Show;
new Thread(Run).Start();
}
private void Run()
{
form = new Form2();
Invoke(showDelegate);
}
private void Show()
{
form.Show();
}
请务必将事件设置为Form1_Load
。
ComboBox.DropDownStyle
更改为Simple
并将其视为无效!请问这个问题有什么帮助吗?
答案 0 :(得分:2)
只需移动
form = new Form2();
对于你的Show()方法,它将起作用。
表单在您启动的主题上初始化,然后就可以了。但是你可能想长期检查这种行为......