質問

こんにちは私はこの状況を解決してみます。 MVVMデザインを備えたWPFアプリがあります。 Caliburn Micro Frameworkを使用し、注入MEFを使用しています。

WPFアプリでは、外部アセンブリからサービスを使用します。うまく機能します。

問題はです。 Observable DictionaryをListBoxにバインドします。 ListBoxは0〜400アイテムで構成できます。画像とSOM Texboxで構成されているListBoxアイテムにデータテンプレートがあります。リストボックスは、SkypeまたはGoogleトークの連絡先リストに似ています。

私はサービスから3-4秒の方法ごとに電話をかけ、Wichは辞書として新しいデータを返します。このデータを使用して、AJリフレッシュリストボックス。

私のコードは、このようなビューモデルを見ています:

      private DispatcherTimer _dispatcherTimer;
            private MyObservableDictionary<string, UserInfo> _friends;
            //temp
            private MyObservableDictionary<string, UserInfo> _freshFriends;

    //bind on listbox
            public MyObservableDictionary<string, UserInfo> Friends
            {
                get { return _friends; }
                set
                {
                    _friends = value;
                    NotifyOfPropertyChange(() => Friends);
                }
            }

    //in constructor of view model I have this:
                _dispatcherTimer = new DispatcherTimer();
                _dispatcherTimer.Tick += DispatcherTimer_Tick;
                _dispatcherTimer.Interval = TimeSpan.FromSeconds(3);
                _dispatcherTimer.Start();

// on timer tick I call method from service
        private void DispatcherTimer_Tick(object sender, EventArgs eventArgs)
        {

            //get new data from server
            //method GetFriends take much of time
            _freshFriends = _service.GetFriends(Account);

            //delete old data
            _friends.Clear();

            //refresh
            foreach (var freshFriend in _freshFriends)
            {
                Friends.Add(freshFriend);

            }
        }

私が言ったように、問題は、メソッドがサービスからの親友に多くの時間がかかり、私のアプリがフリーズすることです。

この問題をどのように解決できますか? Winformsアプリでは、バックグラウンドワーカーを使用していますが、これはMVVMを使用した最初のWPFアプリです。ビューモデルクラスで多くの時間を消費する「パテラン」または「デザイン」方法が存在します。この方法を別のスレッドで呼び出しますか?

役に立ちましたか?

解決

他の人が示唆しているように、あなたはaを使用できます BackgroundWorker WPFアプリで、または.NET 4を使用している場合は、 タスクパラレルライブラリ. 。スティーブン・クリアリーは、と比較してTPLに素晴らしい投稿をしています BackgroundWorker ここ - http://nitoprograms.blogspot.com/2010/06/reporting-progress-from-tasks.html

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top