多くの時間をとる/消費するビューモデルコールのコールメソッド
-
11-10-2019 - |
質問
こんにちは私はこの状況を解決してみます。 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