0

我想使用多线程将 items(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;

            }));
    }

它在我的用户控件的初始化功能处中断

调用线程必须是 STA,因为许多 UI 组件都需要这个。

我该如何解决?

4

1 回答 1

2

正确的做法是更新绑定到的集合ItemsControl.ItemsSource。在这种情况下,您不会触及来自另一个线程的可视元素 - 您更新绑定到它的集合。正在更新的集合告诉绑定刷新,那是数据到达 UI 的时候,它已经发生在 UI 线程中,所以没关系。请注意,集合应该实现INotifyCollectionChanged接口才能做到这一点

于 2012-05-03T10:15:50.443 回答