我正在编写一个简单的 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中的示例来了解我现在的位置。
谢谢