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