C# 是否从其他线程向ListView添加项目?(跨线程操作无效)

C# 是否从其他线程向ListView添加项目?(跨线程操作无效),c#,winforms,multithreading,C#,Winforms,Multithreading,我试图在不同的线程中将项目添加到列表视图中,而不是在中创建的,并且得到了一个跨线程错误。如何使此元素在其他线程中可访问?尝试使用属性控件:invokererequired- 尝试使用属性控件:invokererequired- 使用执行更新的任务,使用TaskScheduler.FromCurrentSynchronizationContext将更新计划到UI 与Control.Invoke相比,这种方法的优点是它可以在WPF、Silverlight或Windows窗体中工作,而Control

我试图在不同的线程中将项目添加到列表视图中,而不是在中创建的,并且得到了一个跨线程错误。如何使此元素在其他线程中可访问?

尝试使用属性控件:invokererequired-


尝试使用属性控件:invokererequired-


使用执行更新的
任务
,使用
TaskScheduler.FromCurrentSynchronizationContext
将更新计划到UI

Control.Invoke
相比,这种方法的优点是它可以在WPF、Silverlight或Windows窗体中工作,而
Control.Invoke
仅在Windows窗体中工作


注意:如果您尚未使用.NET 4.0,则可以在中使用
任务
任务调度程序

使用执行更新的
任务
,该任务使用
任务调度程序调度到UI。FromCurrentSynchronizationContext

Control.Invoke
相比,这种方法的优点是它可以在WPF、Silverlight或Windows窗体中工作,而
Control.Invoke
仅在Windows窗体中工作


注意:如果您还未使用.NET 4.0,则可以在中找到
任务
任务调度程序

是否将此代码添加到创建列表视图的位置或要添加到列表视图的位置?是否将此代码添加到创建列表视图的位置或要添加到列表视图的位置?
private delegate void AddItemCallback(object o);

private void AddItem(object o)
{
    if (this.listView.InvokeRequired)
    {
        AddItemCallback d = new AddItemCallback(AddItem);
        this.Invoke(d, new object[] { o });
    }
    else
    {
        // code that adds item to listView (in this case $o)
    }
}