WPF - загрузка данных в фоновом режиме и обновление объектов, связанных с пользовательским интерфейсом - PullRequest
0 голосов
/ 18 декабря 2010

У меня есть ObservableCollection, которая связана с ListBox в моем представлении.В моей ViewModel есть команда.В этой команде я хотел бы обновить все объекты MyObject.

Пример кода:

foreach(MyObject in List)
myobject.Prop = HelperClass.downloadData();

функция downloaddata занимает некоторое время ...

когда я запускаю команду в течение нескольких минут, ничего не происходит ... и вдруг Viewобновляется.

Может ли кто-нибудь мне помочь?

Спасибо

1 Ответ

0 голосов
/ 18 декабря 2010

при выполнении приложений с графическим интерфейсом поток, который заботится о рисовании представления, является тем же, что запускает события, поэтому, если вы в блоке событий этого потока пользовательский интерфейс остановится, попробуйте использовать фоновый работник:

BackgroundWoker bg = new BackGroundWorker();

bg.DoWork += (sender,args) =>
{

foreach(MyObject in List)
myobject.Prop = HelperClass.downloadData();
};
bg.RunWorkerAsync();

BackgroundWorker выполняет вашу работу в другом потоке, освобождая поток пользовательского интерфейса. Если этот код ничего не меняет в пользовательском интерфейсе, вы можете просто поставить рабочий элемент в очередь в пул потоков.

...