控件在创建它的线程以外的线程上访问

时间:2013-02-07 05:57:34

标签: c# .net winforms multithreading

enter image description here

简而言之:我想加载我的表单,然后使用来自Background Worker的{​​{1}}获取数据并设置一些组合框的数据源。
Database事件中我获取数据,在DoWork事件中我设置了数据源。问题是跨线程问题。我该怎么做才能解决这个问题?

我不明白为什么设置DisplayMember是好的,但在下一行中,设置ValueMember会抛出异常

2 个答案:

答案 0 :(得分:11)

您可以使用控件的“Invoke”方法在与该控件相同的上下文(线程)中运行代码。这是一个简单的例子:

comboBox1.Invoke((MethodInvoker)delegate{
       //Code to modify control will go here
            comboBox1.Text = "";
        });   

答案 1 :(得分:2)

我认为你倒退了。 DoWork应为FetchData,DoWorkCompleted应为BindComboBoxes