我有一个在后台运行的线程,它定期尝试更新ListView组件,但每次尝试我都会得到一个“跨线程操作无效:控制'dlList'从线程以外的线程访问它创建于。“错误。我已经使用了一个代理来尝试解决这个问题,但它并没有解决问题。我的代码有问题吗?我也尝试过Invoke而不是BeginInvoke但同样的问题。
delegate void updateListItemDelegate(string tag, ListViewItem lv);
private void updateListItem(string tag, ListViewItem lv)
{
if (this.dlList.InvokeRequired)
{
this.dlList.BeginInvoke(new updateListItemDelegate(updateListItem),tag,lv);
return;
}
else
{
int index = -1;
foreach (ListViewItem x in dlList.Items)
{
if (x.Tag.ToString() == tag)
index = x.Index;
}
if (index != -1)
{
dlList.Items[index].SubItems[1] = lv.SubItems[1];
dlList.Items[index].SubItems[3] = lv.SubItems[3];
}
}
}
通过:
调用 updateListItem(x.url, x.details);
答案 0 :(得分:0)
尝试Thomas Levesque中的AsyncObservableCollection。
答案 1 :(得分:0)
阿。我在记录异常的代码周围有一个try {} catch {},没有意识到我在类中设置的ListView项也需要一个委托来调用它以及表单组件。好的小费Fredrik!