对ListView进行跨线程调用

时间:2009-12-03 06:42:59

标签: c# listview multithreading delegates

我有一个在后台运行的线程,它定期尝试更新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);

2 个答案:

答案 0 :(得分:0)

尝试Thomas Levesque中的AsyncObservableCollection。

答案 1 :(得分:0)

阿。我在记录异常的代码周围有一个try {} catch {},没有意识到我在类中设置的ListView项也需要一个委托来调用它以及表单组件。好的小费Fredrik!