我想使用多线程将项目(UserControl)设置为ItemsControl。我的代码喜欢这个
System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ThreadStart(SetItemsControl));
thread.Start();
void SetItemsControl()
{
IDictionary<string, object> list = GetUserControlList(); // this function return list of UserControl
this.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal,
new Action(delegate()
{
mylistcontrol.ItemsSource = list;
}));
}
它在我的usercontrol的初始化函数中断了
调用线程必须是STA,因为许多UI组件都需要这个。
我该如何解决?
答案 0 :(得分:2)
正确的方法是更新绑定到ItemsControl.ItemsSource
的集合。在这种情况下,您不会触摸另一个线程中的可视元素 - 您更新绑定到它的集合。正在更新的集合告诉绑定刷新以及数据到达UI时的情况,并且它已经在UI线程中发生,因此它没有问题。请注意,集合应该实现INotifyCollectionChanged
接口以便能够执行此操作