我ListBox
名为lstProductGroups。
在一个简单的Windows窗体上,一个名为GetGroups
的方法为我提供了用户选择的字符串组,如Cars, Bikes
等。
public List<string> GetGroups()
{
List<string> prodGroups = (from object item in lstProductGroups.SelectedItems select item.ToString()).ToList();
return prodGroups;
}
但是如果我尝试从另一个线程访问相同的方法,我会在列表中获取名为System.Data.DataRowView
的所有项目。
我甚至在foreach
循环中使用BeginInvoke
进行了尝试,但item.ToString()
始终返回System.Data.DataRowView
。
我是使用线程的Winforms新手。我做错了什么?
答案 0 :(得分:1)
首先声明一个委托:
delegate List<string> GetItemsDlg();
像这样改变你的方法:
List<string> GetGroups() {
if (lstProductGroups.InvokeRequired) {
var dlg = new GetItemsDlg(GetGroups);
return lstProductGroups.Invoke(dlg) as List<string>;
}
List<string> prodGroups = (from object item in lstProductGroups.SelectedItems select item.ToString()).ToList();
return prodGroups;
}
调用您的方法:
List<string> items = GetGroups();
答案 1 :(得分:0)
如何调用:
Invoke((MethodInvoker) delegate
{
...
}