我有几个绑定到LDAP数据源的DropDownLists。由于它们需要一段时间才能加载,我想尝试通过多线程来降低性能。但是,当我运行以下代码时,我分配给线程的方法似乎没有执行。在编译或运行时没有抛出错误。 DropDownLists只是保持未绑定状态。如果我没有线程化,这两种方法都可以正常工作。
if (DropDownListOwner.Items.Count == 0)
{
Thread t = new Thread(BindDropDownListOwner);
t.Start();
}
if (DropDownListAddEditRecipients.Items.Count == 0)
{
Thread t2 = new Thread(BindDropDownListAddEditRecipients);
t2.Start();
}
// Delegate Methods
public void BindDropDownListOwner()
{
List<KeyValuePair<string, string>> emp = EmployeeList.emplList("SAMAccountName", "DisplayName");
DropDownListOwner.DataSource = emp.OrderBy(item => item.Value);
DropDownListOwner.DataTextField = "Value";
DropDownListOwner.DataValueField = "Key";
DropDownListOwner.DataBind();
}
public void BindDropDownListAddEditRecipients()
{
List<KeyValuePair<string, string>> emp2 = EmployeeList.emplList("Mail", "DisplayName");
DropDownListAddEditRecipients.DataSource = emp2.OrderBy(item => item.Value);
DropDownListAddEditRecipients.DataTextField = "Value";
DropDownListAddEditRecipients.DataValueField = "Key";
DropDownListAddEditRecipients.DataBind();
}
答案 0 :(得分:3)
看起来您正在尝试从其他线程更新UI组件。这不起作用。 当你尝试设置它的属性时,该组件应该抛出异常,并且你的线程就会死掉。
您可以在其他线程上执行资源密集型计算,但随后使用主线程更新UI。为此,对于WPF,您可以在控件本身上使用Dispatcher类,用于WinForms BeginInvoke方法。