私は単純な Windows フォーム アプリケーションを作成して、Threads を使った作業に取り掛かります。これまでのところ、私が持っているものは機能していますが、私がやりたいのは、フォーム コードに直接ではなく、すべてを別のクラスに含めることです。
データベースからデータを開始して取得するバックグラウンド スレッドがあります。次に、そのデータをリストボックスに表示します。
private delegate void UpdateListValues(List<ListBoxItem> itemList);
private void form_main_Shown(object sender, EventArgs e)
{
// Set the loading text.
list_selection.Items.Add(ListHelpers.LoadingItem());
// Start the data access on a seperate thread.
Thread worker = new Thread(GetInvoicingData);
worker.IsBackground = true;
worker.Start();
}
private void GetInvoicingData()
{
// Query database
List<ListBoxItem> values = DAC.GetInvoicingAccounts();
// Display results
BeginInvoke(new UpdateListValues(DisplayList), new object[] { values });
}
private void DisplayList(List<ListBoxItem> itemList)
{
// Display each result
list_selection.Items.Clear();
for (int i = 0; i < itemList.Count; i++)
{
list_selection.Items.Add(itemList[i]);
}
}
問題は、DisplayList メソッドでは、フォーム クラスの一部であるため、リスト ボックス (list_selection) にアクセスできないことです。私がこれを行う方法について何か提案はありますか?
また、私はスレッド化が初めてなので、まったく間違っていることを教えてください。http://www.codeproject.com/Articles/23517/How-to-Properly-Handle-Cross-thread-Events-and-Updの例を使用して、現在の場所にたどり着きました。
ありがとう