Привет, я пытаюсь решить эту ситуацию.У меня есть приложение WPF с дизайном MVVM.Я использую Caliburn Micro framework и на MEF впрыскивания.
В приложении WPF я использую сервис из внешней сборки.Работает хорошо.
Проблема есть.Я привязываю наблюдаемый словарь к списку.Список может содержать от 0 до 400 элементов.У меня есть шаблон данных в элементе списка, он состоит из изображения и сома.Listbox похож на список контактов в скайпе или Google Talk.
Я каждые 3-4 секунды вызываю метод из сервиса, который возвращает новые данные в виде словаря.А с этими данными 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);
}
}
Как я уже говорил, проблема в том, что метод GetFriends из службы отнимает много времени, и мое приложениезамерзает.
Как можно решить эту проблему?В приложении winforms я использую фоновый рабочий, но это мое первое приложение WPF с MVVM.Существуют ли какие-либо «патерны» или «конструкторские» методы вызова метода, которые занимают много времени в классе модели представления?Вызовите этот метод в другом потоке?