1

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

1 に答える 1

3

他のスレッドから UI コンポーネントを更新しようとしているようです。それはうまくいきません。そのようなプロパティを設定しようとすると、そのコンポーネントによって例外がスローされ、スレッドが停止します。

他のスレッドでリソースを集中的に使用する計算を実行できますが、メイン スレッドを使用して UI を更新します。これを行うには、WPF では Dispatcher クラスを、WinForms ではコントロール自体の BeginInvoke メソッドを使用できます。

于 2013-08-22T15:07:49.110 に答える