“跨线程操作无效”,如果 ComboBox.DropDownStyle == 简单
本文关键字:如果 ComboBox DropDownStyle 简单 线程 操作 无效 | 更新日期: 2023-09-27 18:33:08
我有一个表单,它显示在通过 Invoke 调用的方法中,因为该方法是从不同的线程调用的。在我需要打开的表单中,我有一个带有组合框的用户控件。如果ComboBox.DropDownStyle
Simple
窗体。表演爆炸投掷
无效操作异常:跨线程操作无效:控制 "comboBox1"从它所在的线程以外的线程访问 创建于。
如果我在默认值(DropDown(中设置ComoBox.DropDownStyle,我没有问题。
我现在这有点难以理解(甚至相信(,所以这里有一个简化的例子来重现它:
- 创建一个新的 winforms 项目。
- 创建两个窗体和一个用户控件。
- 在用户控件中创建一个组合框。
- 在 Form2 中放置用户控件的实例。
- 在 Form1 代码中,输入以下内容:
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
,然后看到它不起作用!
请对此问题提供任何帮助?
只需移动
form = new Form2();
对于您的 Show(( 方法,它将起作用。
表单在您启动的线程上初始化,然后它就可以工作了。但是您可能希望长期检查行为...