【发布时间】:2013-02-06 12:56:32
【问题描述】:
我认为代码很清楚
private void ucPerson_Load(object sender, EventArgs e)
{
person = new Person();
BackgroundWorker backgroundBinder = new BackgroundWorker();
backgroundBinder.DoWork += BindComboBoxes;
backgroundBinder.RunWorkerAsync();
}
private void BindComboBoxes(object sender, DoWorkEventArgs e)
{
cmbEducationLevel.DataSource = Program.eService.GetEducationLevels();
cmbNationality.DisplayMember = "Name";
cmbNationality.ValueMember = "NationalityID";
}
我得到的错误:
跨线程操作无效:控件“cmbNationality”从创建它的线程以外的线程访问。
我需要做些什么才能使我的background-worker 的线程能够访问组合框?
【问题讨论】:
-
您必须将
DataSource的分配推迟到工作人员完成运行后。 -
@UweKeim 我怎样才能知道工人何时完成运行?你能给我举个例子吗?
-
RunWorkerCompleted被触发到您的前台线程。因此,就像您接受的答案一样,在此处理程序中进行工作是一种好方法。
标签: c# .net winforms multithreading