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;

            }));
    }

そして、それは私のユーザーコントロールの初期化機能で壊れます

多くのUIコンポーネントがこれを必要とするため、呼び出しスレッドはSTAである必要があります。

どうすれば修正できますか?

4

1 に答える 1

2

これを行う正しい方法は、にバインドされているコレクションを更新することですItemsControl.ItemsSource。このシナリオでは、別のスレッドのビジュアル要素に触れないでください。バインドされているコレクションを更新します。更新されるコレクションは、バインディングに更新を指示します。これは、データがUIに到達するときであり、UIスレッドで既に発生しているため、問題ありません。コレクションはそれを実行INotifyCollectionChangedできるようにインターフェースを実装する必要があることに注意してください

于 2012-05-03T10:15:50.443 に答える