从另一个线程更新 ObservableCollection
Posted
技术标签:
【中文标题】从另一个线程更新 ObservableCollection【英文标题】:Update ObservableCollection from another thread 【发布时间】:2017-01-04 04:00:41 【问题描述】:我有问题。找了很多,但找不到解决办法。我需要 而不冻结 UI。我正在使用NET4.0。 此代码不允许我看到“ProgressRing”和“Searching”消息。谢谢!
private void Search()
ShowMessage = "Searching..."; // Message while the search is made.
IsBusy = true; // Show WPF Toolkit BusyIndicator
ShowProgressRing = true; // To show a ProgressRing in BusyIndicator
Task.Factory.StartNew(() =>
Articles = new ObservableCollection<Article>();
/////////////////////////////
//// Simulate SQL query ////
///////////////////////////
for (var i = 0; i < 1000; i++)
Articles.Add(new Article
Code = i.ToString(),
Name = "PRODUCT NAME",
Price = 1m
);
).ContinueWith(x =>
IsBusy = false; // Hide
, TaskScheduler.FromCurrentSynchronizationContext());
编辑
private bool _showProgressRing;
public bool ShowProgressRing
get return _showProgressRing;
set
_showProgressRing = value;
RaisePropertyChanged("ShowProgressRing");
private bool _isBusy;
public bool IsBusy
get return _isBusy;
set
_isBusy = value;
RaisePropertyChanged("IsBusy");
private string _showMessage;
public string ShowMessage
get return _showMessage;
set
_showMessage = value;
RaisePropertyChanged("ShowMessage");
我的 VM 继承自 ViewModelBase (MVVM Light)
【问题讨论】:
【参考方案1】:我假设您的 ShowMessage 是这样定义的:
private string _ShowMessage ;
public string ShowMessage
get
return _ShowMessage;
set
this.Set<string>("ShowMessage ", ref this._ShowMessage , value);
与您的 IsBusy 属性相同:
private string _IsBusy ;
public bool IsBusy
get
return _IsBusy ;
set
this.Set<bool>("IsBusy ", ref this._IsBusy , value);
和
相同 private string _ShowProgressRing;
public bool ShowProgressRing
get
return _ShowProgressRing;
set
this.Set<bool>("ShowProgressRing", ref this._ShowProgressRing, value);
整个类都继承自ObservableObject
,你这样做了吗?
【讨论】:
文章类呢? 一个简单的类,只有5个参数 并且它正在实现相同的接口?以上是关于从另一个线程更新 ObservableCollection的主要内容,如果未能解决你的问题,请参考以下文章