我正在尝试从后台线程对Windows Forms应用程序上的ListView中的选定项目执行一些操作。我的代码中有一个委托方法,如下所示:
private delegate ListView.SelectedListViewItemCollection dlgGetSelectedJobs();
private ListView.SelectedListViewItemCollection GetSelectedJobs()
{
if(listViewJobViewer.InvokeRequired)
{
var dlg = new dlgGetSelectedJobs(GetSelectedJobs);
return listViewJobViewer.Invoke(dlg) as ListView.SelectedListViewItemCollection;
}
return listViewJobViewer.SelectedItems;
}
这在后台线程的其他地方使用以下命令进行调用:
foreach(ListViewItem job in GetSelectedJobs())
{
// Do stuff
}
但是,无论何时代码进入foreach循环,我都会遇到一个跨线程异常,我不确定为什么...非常感谢收到任何帮助!
感谢蒙珠的帮助!
我已经设法通过更改委托方法以使用Linq根据ListView中的选定项返回List来解决此问题:
private delegate List<ListViewItem> dlgGetSelectedJobs();
private List<ListViewItem> GetSelectedJobs()
{
if(listViewJobViewer.InvokeRequired)
{
var dlg = new dlgGetSelectedJobs(GetSelectedJobs);
return listViewJobViewer.Invoke(dlg) as List<ListViewItem>;
}
return (from ListViewItem i in listViewJobViewer.SelectedItems select i).ToList();
}
我仍然不确定为什么当我尝试返回集合时为什么它不起作用,但这似乎可以正常工作。