分配给新线程的方法未执行

本文关键字:方法 执行 线程 新线程 分配 | 更新日期: 2023-09-27 18:28:49

我有几个DropDownList,它们绑定到LDAP数据源。由于它们需要一段时间才能加载,我想尝试通过多线程来减轻性能打击。然而,当我运行以下代码时,我分配给线程的方法似乎不会执行。在编译或运行时没有抛出任何错误。DropDownList保持未绑定状态。如果我不线程化这两种方法,它们都可以正常工作。

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();
}

分配给新线程的方法未执行

看起来您正在尝试从其他线程更新UI组件。这行不通。当您尝试这样设置组件的属性时,该组件应该抛出异常,而您的线程就死了。

您可以在其他线程上进行资源密集型计算,但随后使用主线程来更新UI。为此,对于WPF,您可以使用Dispatcher类,对于控件本身的WinForms BeginInvoke方法。