我正在尝试将项目添加到与创建的不同的线程中的列表视图中,并且遇到跨线程错误。如何在其他线程中访问此元素?
答案 0 :(得分:2)
尝试使用属性控件:InvokeRequired - http://msdn.microsoft.com/en-us/library/ms171728%28VS.80%29.aspx
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)
}
}
答案 1 :(得分:0)
使用执行更新的Task
,使用TaskScheduler.FromCurrentSynchronizationContext
安排到用户界面。
http://msdn.microsoft.com/en-us/library/dd997394.aspx
这种方法优于Control.Invoke
的优势在于它可以在WPF,Silverlight,或 Windows窗体中使用,而Control.Invoke
仅适用于Windows窗体。
P.S。如果您尚未使用.NET 4.0,则Rx library中可以使用Task
和TaskScheduler
。